web-dev-qa-db-ja.com

従来のオーディオショートコード

私は最近、もともと2011年に作成されたサイトをやり直しました。もちろん、開発上の大きな問題がいくつかありました。そのうちの1つは、古いオーディオショートコードの使用です。

[音声: http:// localhost:8888/lusa/audio/1310seg02.mp3]

コロンを使ったネイティブのWordpressオーディオショートコードのドキュメントは見たことがありません。私はこのようにそれを使うプラグインを見つけることもできませんでした。

このショートコードを機能させる方法を誰かが知っていますか?私は自分の選択肢があると信じています。

  1. このオーディオショートコードを新しいフォーマットに変換するスクリプトを作成します[audio src = "http:// localhost:8888/lusa/audio/1310seg02.mp3] https://codex.wordpress。 org/Audio_Shortcode
  2. もともとこの方法でショートコードを作ったプラグインを見つけてください。

/========進捗========/

@ gmazzapは私を正しい軌道に乗せました!問題は、shortcode_atts_audioフックを使用すると、$ atts変数が事前定義された属性(src、loop、autoplay、preload)の外側に文字列を出力しないことです。それが私が以下のコードでやっていることです。しかし今、私はその属性をショートコードに戻してそれを出力するのに苦労しています。

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
Celso

あなたの唯一の問題がフォーマットが間違っているということであるならば、正しいバージョンでそれを the_content フックに切り替えてください。


非ローカルコンテンツ

[audio:http://www.soundhelix.com/examples/mp3/SoundHelix-Song-7.mp3]

プラグインまたはfunctions.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 );
}
1
jgraup

'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;
} );

このようにして、デフォルトのオーディオショートコードハンドラはショートコードをレンダリングできるはずです。

テストされていません

1
gmazzap