web-dev-qa-db-ja.com

一部のオーディオショートコードHTML出力のみをオーバーライドするときのエラー

コンテキスト

WordPressフックのおかげで、オーディオショートコードのHTMLレンダリングをオーバーライドする機能があります。

wp_audio_shortcode_override

私はこれをOOPプラグインでこのように使用しました。

add_filter( 'wp_audio_shortcode_override' , array( $this, 'wp_audio_shortcode_override' ), 10, 2 );

すべてのHTMLショートコードが上書きされないようにするために、カスタムショートコード属性を作成します。

player="default"

ドキュメントとソースコードから読むことができる限り、空の文字列''を返した場合、オーバーライドはオフになっているはずです。だから私はこれを私のrender関数の始めに書いた:

public function wp_audio_shortcode_override( $html, $attr ) {

    $html = ''; // This is the value to disable the shortcode override

    if ( isset( $attr['player'] ) ) {
        if( $attr['player'] === 'default' )
            var_dump( $html );
            return $html;
    } 
    // After that, some code to fill the $html with thing to render,
    //   according to the shortcode attributes values

関数の次の部分は、ショートコードをどのように上書きする必要があるかです。

結果

  • 条件なしのショートコードの上書き
  • 関数に条件を追加して、対応するショートコード属性player="default"を1つのオーディオショートコードに書き込むと、うまくいきます。
  • 投稿内のすべてのオーディオショートコードに同じショートコード属性値を追加すると機能します。
  • 同じ投稿に含まれていないものと含まれていないものがあります

再現する

このために、私はここに投稿されたプラグインの例から始めました: Wordpressオーディオプレーヤーの幅をコントロールすることは可能ですか?

援助

私は何を取りこぼしたか?すべてのショートコードで上書きを無効にできますが、同じ投稿で選択的に無効にできないのはなぜですか。

2
X-Raym

投稿に含まれる[audio]タグの数に関係なく、またどの属性にも関係なく、これは機能するはずです。私の推測では、あなたのハンドラーのロジックがわずかにオフになっているか、あるいはサードパーティ(すなわちプラグイン)がデフォルトのショートコードハンドラーの振る舞いを乗っ取っているのでしょう。

テストするには、コードを削除して次のことを試してください。デフォルトのショートコードとフィルタが期待どおりに機能しているかどうか(またはそうでない場合)を明確に示すはずです。

function wpse_209708_debug_audio_shortcode( $html, $attr ) {
    if ( ! empty( $attr['player'] ) && $attr['player'] === 'default' )
        $html = '{audio player:default}';
    else
        $html = '{audio player:other}';

    return "<p>$html</p>";
}

add_filter( 'wp_audio_shortcode_override', 'wpse_209708_debug_audio_shortcode', 10, 2 );

戻って報告して、私はこれを「本当の」答えで更新します。

1
TheDeadMedic