如何根据语言更改菜单?

时间:2012-12-25 作者:Mert Nuhoglu

我想根据用户的语言更改主菜单。我已经回顾了WPML和qTranslate等多语言插件。他们有很多功能,但我想要的比他们提供的要简单得多。

右上角将有三个链接,如英语、阿拉伯语和土耳其语。当用户单击其中一个时,菜单栏应相应更改。

1 个回复
最合适的回答,由SO网友:brasofilo 整理而成

这可以通过cookie完成
我们使用Javascript进行设置,重新加载页面,并使用其值在PHP中显示不同的菜单。

首先,在站点页脚处打印脚本(请参见注释)<注意:最好将其与主题脚本一起排队

add_action( \'wp_footer\', \'wpse_77220_language_cookie\' );   
/**
 * Cookie script based on http://github.com/bainternet/Admin-Page-Class
 */
function wpse_77220_language_cookie()
{
    echo \'<script>
    /* Set Cookie */
    function setCookie( name,value,days ) 
    {
        if (days) 
        {
            var date = new Date(); 
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";

        document.cookie = name+"="+value+expires+"; path=/";
    } 

    /* Get Cookie - not used in this example */
    function getCookie( name ) 
    {
        var nameEQ = name + "=";

        var ca = document.cookie.split(";");
        for(var i=0;i < ca.length;i++) 
        {
            var c = ca[i]; 
            while (c.charAt(0)==\\\' \\\') c = c.substring(1,c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
    }

    /* Erase Cookie - not used in this example */
    function eraseCookie(name) { setCookie(name,"",-1); }

    // Bind click on language menu action to show the nav menu.
    jQuery(document).ready(function() 
    { 
        jQuery(".lingo").bind("click", function(event)
        {
            setCookie( "user_lingo", jQuery(this).attr("id") );
        });
    });
</script>
\';
}
如果主题中未包含jQuery:

add_action( \'wp_enqueue_scripts\', \'wpse_77220_enqueue_jquery\' );   
function wpse_77220_enqueue_jquery() {
    wp_enqueue_script( \'jquery\' );
}
然后,在主题中header.php, 我们这样说:

</head>
<?php 
    if( isset( $_COOKIE[\'user_lingo\'] ) ) {
        $user_lingo = $_COOKIE[\'user_lingo\'];
    } else {
        $user_lingo = \'en\';
    }
?>
<body <?php body_class(); ?>>
然后wp_nav_menu:

<?php wp_nav_menu( array( \'menu\' => $user_lingo ) ); ?>
在本例中,导航菜单与我们将为cookie设置的值具有相同的名称。如果菜单有其他名称,则必须调整标题条件$user_lingo.
navigation menus

最后是语言菜单。班级lingo 通过jQuery绑定以使用锚设置cookie值id\'s、 Thehref 值强制重新加载页面,如果愿意,可以使用其他方法。

<a href="?lang=pt" id="pt" class="lingo">pt</a> |
<a href="?lang=es" id="es" class="lingo">es</a> |
<a href="?lang=en" id="en" class="lingo">en</a>

结束

相关推荐

Wordpress Custom Menus Issue

在我的模板中,我使用这样的调用来输出一些自定义菜单:<?php wp_nav_menu(array(\'container_class\' => \'secondary-navigation\', \'theme_location\' => \'secondary\')); ?> 自从升级到WordPress 3.1.4后,我就可以获得完整的页面列表,而不是自定义菜单我看到修复程序(通过谷歌)说我应该添加以下内容来修复此问题:\'fallback_cb\' => f