Как я могу применять фильтры в своем классе, которые расширяют Walker_Nav_Menu?

У меня есть следующий сокращенный код:

<?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; } } ?> 

Правильно ли это?

apply_filters() применяет набор зарегистрированных (с add_filter() ) обратных вызовов.

Когда вы применяете фильтр, убедитесь, что его имя не является одним из зарезервированных , 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 . ' << '; } }