这是我的apply_filters函数,用于返回选择框选项:
function my_shortcode_filters(){
$handle = ''; $value = apply_filters('my_add_shortcode', $handle);
if($value) $handle = "<option value='$value'>$value</option>";
return $handle;
}
这是我调用函数的html:
<select id="my-selectbox">
<?php echo my_shortcode_filters(); ?>
<option value="">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
以下是我正在测试的add_filter函数:
add_filter('my_add_shortcode', 'yourprefix_new_sc_handle', 10);
function yourprefix_new_sc_handle(){
return 'myhandle';
}
add_filter('my_add_shortcode', 'yourprefix_new_sc_handle2', 11);
function yourprefix_new_sc_handle2(){
return 'myhandle2';
}
但只有第二个add_filter函数被添加到下拉菜单中。如果我删除第二个功能,则添加第一个功能。但是当我添加第二个函数时,它会覆盖第一个add_filter。我在这里缺少什么?
答案 0 :(得分:0)
过滤器旨在过滤内容,而不仅仅是返回值。
IE,你开始使用变量作为某个值的值,然后过滤器操纵该值,直到所有过滤器都被应用为止,最后得到最终值。
EG:
add_filter( 'my_x', 'test_one' );
function test_one( $var ) {
return $var . 'y';
}
$var = 'x';
echo apply_filters( 'my_x', $var );
结果:xy
因为它需要x然后将y附加到它。
您的上述代码正在返回,而不是进行任何实际过滤 - 因此您可能会遇到错误,其中最后一个要运行的函数就是您看到的结果。
我认为您尝试做的事情(我可能错了)是使用操作,而不是过滤器。
查看add_action()
和do_action()
,看看是否有帮助。