25
Sep

Traduction des liens personnalisés dans wordpress avec qtranslation

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Contactez-nous

Formulaire de contact

    Votre nom (obligatoire)

    Votre email (obligatoire)

    Votre téléphone (obligatoire)

    Sujet

    Votre message