下面是我的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。我在这里错过了什么?
过滤器用于过滤内容,而不仅仅是返回一个值。
IE,你从一个变量开始,它是某个东西的值,然后过滤器操纵这个值,直到应用了所有过滤器,你得到了最终的值。
例如:
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()
,看看这是否有帮助。