【问题标题】:apply_filters only adding second add_filter functionapply_filters 仅添加第二个 add_filter 函数
【发布时间】:2014-06-03 14:12:25
【问题描述】:

这是我的 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。我在这里错过了什么?

【问题讨论】:

    标签: php wordpress filter


    【解决方案1】:

    过滤器旨在过滤内容,而不仅仅是返回值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多