如何在扩展Walker_Nav_Menu的类中应用滤镜?

时间:2011-10-22 作者:hamahama

我有以下一段简略代码:

<?php 
class New_Walker_Nav_Menu extends Walker_Nav_Menu {


function start_el(&$output, $item, $depth, $args) {
    $attributes  = ! empty( $item->target )     ? \' target="\' . esc_attr( $item->target     ) .\'"\' : \'\';
    $attributes .= ! empty( $item->url )        ? \' href="\'   . esc_attr( $item->url        ) .\'"\' : \'\';
    $output .= \'<li><a\'. $attributes .\'>\';
    $output .= apply_filters( \'the_title\', \'modifyTitle\', $item->ID );
    $output .= \'</a></li>\';
}
function modifyTitle($title){
    return $title . asd;
}
}
?>
这样做对吗?

1 个回复
最合适的回答,由SO网友:soulseekah 整理而成

apply_filters() 应用一组已注册的add_filter()) 回调。

应用筛选器时,请确保其名称不是reserved ones, the_title 看起来与其他过滤器有危险的“碰撞”。

您的筛选应用程序几乎正确,但不需要“modifyTitle”位。。。

// apply the filter
apply_filters( \'wpse31787_the_title\', $item->ID );
。。。相反,您必须为wpse31787_the_title 初始化期间

function __construct() {
    add_filter( \'wpse31787_the_title\', array($this, \'modifyTitle\') );
}
你的函数定义是

function modifyTitle( $item_id ) {
    // ...your code goes here
}
如果要传递多个参数,则必须扩展过滤器添加,如下所示:

// 2 arguments are expected
add_filter(  \'wpse31787_the_title\', array($this, \'modifyTitle\'), null, 2 );
所以,如果我把所有的位放在一起,我会有这样的东西:

class New_Walker_Nav_Menu extends Walker_Nav_Menu {
    function __construct() {
        add_filter(  \'wpse31787_the_title\', array($this, \'modifyTitle\'), null, 2 );
    }

    function start_el( &$output, $item, $depth, $args ) {
        $output .= apply_filters( \'wpse31787_the_title\', $item->title );
    }

    function modifyTitle( $title ){
        return $title . \' << \';
    }
}

结束

相关推荐

Search options/filters

我正在尝试向侧栏搜索框添加一些复选框选项,similar to this, 用户可以选择是否搜索All Words, Some Word, 或者Entire phrase.我确实在搜索后找到了这个-Wordpress Search Phrases. “句子”选项似乎很有效,但其他选项则不太好。下面的代码是我目前正在处理的,但如果能得到一些帮助使其正常工作,我将不胜感激。非常感谢S(我不想为此使用插件)。<form action=\"<?php bloginfo(\'home\'); ?>