WordPress clean internationalization for menus?

What are nav menu items?

When you’re translating post, pages & custom post types, then i guess you’ll be also translating the titles. In general nav menu items are only posts, pages, etc. and therefore (should) come with the full content & data the post provides (if not, then you can still call the post meta).

The filter callback function

  • Pro: there’s a filter for the output of the nav menu items.
  • Contra: It can cause problems, like the nav menu not appearing on the admin UI screen, so pay attention to test this properly.

The “check nav menu items” callback function:

    function wpse18880_check_nav_menu_items( $items, $menu, $args )
    {
        if ( is_admin() )
            return;

        echo '<pre>';
            # Show what we got:
            echo '<h3>THE MENU</h3>';
            print_r( $menu );
            echo '<hr /><h3>THE ITEMS</h3>';
            print_r( $items );
            echo '<hr /><h3>THE ARGUMENTS</h3>';
            print_r( $args );
        echo '</pre>';

        return $items;
    }
    add_filter( 'wp_get_nav_menu_items', 'wpse18880_check_nav_menu_items', 10, 3 );

Modifying the menu items:

So, when looking at the output of $item, you’ll see that every item has it’s post-data (“or whatever it is”-data) attached. So calling the additional post data (via get_post_meta()) like in the follwing example should give you access to your language specific content:

// This example is for 'post' post_type menu items:
foreach ( $items as $item )
{
    $post_ID = $item->ID;
    // now let's overwrite the original post_title
    $item->post_title = get_post_meta( $post_ID, 'i18n_title', true );
}

NOTE: I only tested the check nav menu items function, not overwriting the single items data. Please update this answer with the final code if you got it working. Thank you.

techhipbettruvabetnorabahisbahis forumutaraftarium24edusedueduseduseduseduedueduedusedu