Aujourd’hui on m’appelle pour résoudre un problème: Les traductions de langue ne se font pas sur les liens personnalisés du menu wordpress.
Zut .. encore un plugin qui bosse qu’à moitié .. Finalement je trouve dans mes recherches la solution plutôt rapidement.
Simplement en ajoutant une classe dans le function.php du theme.
class CustomLinkModifierWalker extends Walker_Nav_Menu { function __( $text ) { $text = urldecode( $text ); if ( preg_match_all('~(.*?)\|(\w{2,})\|~', $text, $matches) ) { $text = ''; foreach ($matches[1] as $i => $match) { $text .= "[:{$matches[2][$i]}]$match"; } $text = __( $text ); } return $text; } function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $classes[] = 'menu-item-' . $item->ID; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) ); $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : ''; $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args ); $id = $id ? ' id="' . esc_attr( $id ) . '"' : ''; $output .= $indent . '<li' . $id . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $this->__( $item->url ) ) .'"' : ''; $item_output = $args->before; $item_output .= '<a'. $attributes .'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } }
Il faut donc à présent trouver l’emplacement du wp_nav_menu(), souvent placé dans header.php, qui ce trouve lui même bien évidemment dans le theme WP et faire pointer l’attribut walker vers la custom classe !
<?php wp_nav_menu(array( 'theme_location' => 'primary_navi', 'container' => '', 'menu_class' => 'sf-menu', 'fallback_cb' => 'van_scroll_pagemenu', 'echo' => true, 'walker'=> new CustomLinkModifierWalker, 'depth' => 4) ); ?>
Vous seriez intéressé par: