A new release for theme twentyeleven-xili : one menu per language option

For complex and rich multilingual website, it can be good to have a navigation menu per language and organize a navigation with pages and special menu items adapted to each language.

Theme Locations

Theme Locations

Before today, the only way was to modify the code of theme (header) and add registration for this new menus (functions.php). (as in middle of this topic of forum)
Prerequisite : xili-language must be updated to version 2.3
Here, with the example of 2011 xili child theme (twentyeleven-xili 0.9.7), it is more easy with options in theme (xili Options).

Theme multilingual Options

Theme multilingual Options

In the menu locations (see snapshot on top and below) if a menu content is not attached to a menu location, the default menu for root language (currently en_us) is displayed.

Theme menu contents

Theme menu contents

This new version of theme is also an example for theme’s developers – how it works ?

Two filters (and functions) were added in functions.php of the child theme :

The first registers the added navigation menus according the available list of languages:

/**
 * filter to create one menu per language for dashboard
 * detect the default one created by theme ($menu_locations[0])
 * @since 0.9.7
 */
 
add_action ( 'init', 'xili_create_menu_locations',100 );
 
function xili_create_menu_locations () {
	$xili_theme_options = xili_twentyeleven_get_theme_options() ; 
	if ( $xili_theme_options['nav_menus'] == 'nav_menus' ) {  // ok for automatic insertion of one menu per lang...
		$menu_locations =  array_keys( get_nav_menu_locations()); 
		if ( class_exists('xili_language') ) {
			global $xili_language ;
			$default = 'en_us'; // currently the default language of theme in core WP
			$language_xili_settings = get_option('xili_language_settings');
			$language_slugs_list =  array_keys ( $language_xili_settings['langs_ids_array'] ) ;
			foreach ( $language_slugs_list as $slug ) {
				$one_menu_location = $menu_locations[0].'_'.$slug ;
				if ( $slug != $default && !isset($menu_locations[$one_menu_location]) ) {
					register_nav_menu ( $one_menu_location,  sprintf( __('Menu for %s','twentyeleven'), $slug ) );
				}
			}
		} 
	}
}

The second changes during the webpage and menu creation the location, so display the good menu content:

/**
 * filter to avoid modifying theme's header and changes 'virtually' location for each language
 * @since 0.9.7
 */
 
add_filter ( 'wp_nav_menu_args', 'xili_wp_nav_menu_args' ); // called at line #145 in nav-menu-template.php
 
function xili_wp_nav_menu_args ( $args ) {
	if ( class_exists('xili_language') ) {
		global $xili_language ;
		$default = 'en_us'; // currently the default language of theme as in core WP
		$slug = the_curlang();
		if ( $default != $slug ) {
			$theme_location = $args['theme_location'];
			if ( has_nav_menu ( $theme_location.'_'.$slug ) ) { // only if a menu is set by webmaster in menus dashboard
				$args['theme_location'] = $theme_location .'_'.$slug ;
			}	
		}
	}	
	return $args;
}

To conclude

By providing the new version of child :

  1. users of twentyeleven can easily create a navigation menu for each language without modifying code. twentyten-xili version 2.0 also contains this feature.
  2. webmasters and theme’s developers can find code examples how to improve theme’s multilingual features.

Enjoy !

for questions, use comment below or dev.xiligroup forum

13 thoughts on “A new release for theme twentyeleven-xili : one menu per language option

  1. Pingback: xili-language, twentyeleven-xili: New releases... « Forums of xiligroup.dev

  2. Hi, I am testing xili-language and this child theme and have a problem. When I change the “xili Options” under “Appearance”, it erases my “Theme Options” (link color and default layout one column). If I change the options back all the boxes in “xili Options” become unchecked (and the other language menu doesn’t work anymore). Is it just me ?

  3. This – Ok, I will do some tests and release if necessary a new release of this example child theme. Be patient
    dev team

    • Oooh sorry I thought it was an example for other themes, but I thought this one could be used as it is. And it actually is if you don’t need to change the themes options. I understand completely if you don’t want or don’t have time to work on this issue. However I am very patient 😉 But I don’t want to abuse and maybe I could try myself though I’m not a developer (but I like to dig and I’m learning little by little) but I wasn’t even sure at first the problem was from me or the child theme. Nobody asked about it but now I understand better 🙂
      Anyway thank you very much for all the work, it is greatly appreciated. I won’t forget to make a donation when my website is up 🙂

  4. Hello! I have the same problem as Sylvia. If I change the link color it unchecks xili Options. When I re-check them the link color goes back to default. Is there a solution for this? Thanks in advance! Regards, Satu from Finland

    • Thank you, problem solved. I still have these issues:
      – after the post it says “Read this post in suomeksi” – where can I turn this off?
      – when I click languages in header it directs to frontpage, not to the same page in different language.
      – when the mouse is over languages in header title says: “posts selected in suomeksi”.
      I’m not using English on the site so I would need to get all the English off.

      Can you please help and tell me where can I find more detailed info on using xili and maybe solution to the problems above?

      Thank you so much!

Comments are closed.