Ich habe folgenden abgekürzten Code:
target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; $output .= ''; $output .= apply_filters( 'the_title', 'modifyTitle', $item->ID ); $output .= ' '; } function modifyTitle($title){ return $title . asd; } } ?>
Ist das der richtige Weg?
apply_filters()
wendet eine Gruppe registrierter (mit add_filter()
) Callbacks an.
Wenn Sie einen Filter anwenden, stellen Sie sicher, dass sein Name nicht zu den reservierten gehört , the_title
sieht gefährlich “kollidierbar” mit anderen Filtern aus.
Ihre Filteranwendung ist fast korrekt, aber das Bit ‘modifyTitle’ ist nicht erforderlich …
// apply the filter apply_filters( 'wpse31787_the_title', $item->ID );
… stattdessen müssen Sie während Ihrer Initialisierung einen Filter für wpse31787_the_title
registrieren
function __construct() { add_filter( 'wpse31787_the_title', array($this, 'modifyTitle') ); }
Und deine functionsdefinition wäre
function modifyTitle( $item_id ) { // ...your code goes here }
Wenn Sie mehr als einen Parameter übergeben möchten, müssen Sie Ihren Filter-Zusatz wie folgt erweitern:
// 2 arguments are expected add_filter( 'wpse31787_the_title', array($this, 'modifyTitle'), null, 2 );
Also, wenn ich all die Bits zusammenfüge, hätte ich so etwas:
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 . ' < < '; } }