apply_filters只添加第二个add_filter函数

时间:2014-04-19 01:32:10

标签: php wordpress filter

这是我的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。我在这里缺少什么?

1 个答案:

答案 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(),看看是否有帮助。