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オーディオプレーヤーの幅をコントロールすることは可能ですか?
私は何を取りこぼしたか?すべてのショートコードで上書きを無効にできますが、同じ投稿で選択的に無効にできないのはなぜですか。
投稿に含まれる[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 );
戻って報告して、私はこれを「本当の」答えで更新します。