Date de publication:
Commentaires:0

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Vous seriez intéressé par: