apply_filters只添加了第二个add_filter函数


apply_filters only adding second add_filter function

下面是我的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(),看看这是否有帮助。