由于WordPress挂钩,我有一个覆盖音频短码HTML呈现的函数:
wp_audio_shortcode_override
我在一个OOP插件中这样使用它:
add_filter( \'wp_audio_shortcode_override\' , array( $this, \'wp_audio_shortcode_override\' ), 10, 2 );
为了防止覆盖所有HTML短代码,我想创建一个自定义短代码属性:
player="default"
就我所能读取的文档和源代码而言,如果我返回一个空字符串
\'\'
, 超越应关闭。所以我在渲染函数的开头写了这个:
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"
在一个音频短代码中,工作正常为后期工作中的所有音频短代码添加相同的短代码属性值在同一帖子上有带属性的音频短码,有些没有doesn\'t work.为此,我从这里发布的一个插件示例开始:Is it possible to control the width of the Wordpress audio player?
我错过了什么?为什么我可以在所有短代码上禁用覆盖,但不能在同一帖子上有选择地禁用覆盖?
SO网友:TheDeadMedic
不管有多少人[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 );
报告回来,我会用“真实”的答案更新。