Legacy Audio Shortcode

时间:2016-01-08 作者:Celso

我最近重做了一个最初创建于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 ); 
    

    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.