我最近重做了一个最初创建于2011年的网站。当然,开发过程中存在一些大问题,其中之一就是旧音频短代码的使用:
[音频:http://localhost:8888/lusa/audio/1310seg02.mp3]
我还没有看到任何使用冒号的本地Wordpress音频短代码的文档。我也找不到这样使用它的插件。
有人知道我怎样才能让这个短代码发挥作用吗?我相信我的选择是。
创建一个脚本,将此音频短代码转换为较新的格式[音频src=”http://localhost:8888/lusa/audio/1310seg02.mp3]https://codex.wordpress.org/Audio_Shortcode.找到最初以这种方式制作短代码的插件
/
=====进度=======/
@gmazzap让我走上了正确的轨道!问题是,对于shortcode\\u atts\\u音频挂钩,$atts变量不会输出预定义属性(src、loop、autoplay、preload)之外的字符串经过一些挖掘,我发现我可以使用wp\\u audio\\u shortcode\\u覆盖来访问我的url。这就是我在下面代码中所做的。但现在我很难将该属性传递回短代码并输出它。
function legacy_audio_shortcode_converter( $html, $attr ) {
$colon_src = $attr[0]; //get the url string with the colon included.
$attr[\'src\'] = substr($colon_src, 1); //filter out the colon
$new_audio_src = $attr[\'src\']; //save the url as the official audio src
var_dump($new_audio_src); //this is currently outputing the exact url I need but not sure how to make sure the player shows up with this new src.
}
add_filter( \'wp_audio_shortcode_override\', \'legacy_audio_shortcode_converter\', 10, 2 );
最合适的回答,由SO网友:jgraup 整理而成
如果您唯一的问题是格式不正确,请将其切换到the_content
钩住正确的版本。
非本地内容:
[audio:http://www.soundhelix.com/examples/mp3/SoundHelix-Song-7.mp3]
放入插件或函数。php
// hook earlier than 10
add_filter(\'the_content\', \'wpse_20160110_the_content_fix_audio\', 0);
function wpse_20160110_the_content_fix_audio($content){
return str_replace ( \'[audio:\', \'[audio src=\', $content );
}
SO网友:gmazzap
我想你可以用\'shortcode_atts_audio\'
过滤钩子以正确的形式转换参数,并让默认的音频短代码处理程序呈现它。
事实上,用一个短代码[audio:http://localhost:8888/lusa/audio/1310seg02.mp3]
将使用以下参数数组调用短代码处理程序
array(0 => \':http://localhost:8888/lusa/audio/1310seg02.mp3\');
其中正确的格式化参数数组应为
array(\'src\' => \'http://localhost:8888/lusa/audio/1310seg02.mp3\');
因此,您可以:
add_filter( \'shortcode_atts_audio\', function(array $atts) {
if (
empty($atts[\'src\'])
&& ! empty($atts[0])
&& filter_var(ltrim($atts[0], \':\'), FILTER_VALIDATE_URL)
) {
$atts[\'src\'] = ltrim($atts[0], \':\');
}
return $atts;
} );
这样,默认的音频短代码处理程序应该能够呈现短代码。
Untested.