Php WP Nav菜单使用语言代码修改URL

Php WP Nav菜单使用语言代码修改URL,php,wordpress,menu,multilingual,Php,Wordpress,Menu,Multilingual,使用wp\u nav\u menu(),我如何修改生成链接的URL,以便在每个URL末尾添加语言代码,就像我有URLhttp://www.example.com/但我必须在末尾附加language参数,所以url应该是http://www.example.com/?lang=$language您可以使用wp\u get\u nav\u菜单项-过滤器修改wp\u nav\u菜单的行为。下面是一个比较完整的示例: class ModifyLinkFilter { protected $_pr

使用
wp\u nav\u menu()
,我如何修改生成链接的URL,以便在每个URL末尾添加语言代码,就像我有URL
http://www.example.com/
但我必须在末尾附加language参数,所以url应该是
http://www.example.com/?lang=$language

您可以使用
wp\u get\u nav\u菜单项
-过滤器修改
wp\u nav\u菜单
的行为。下面是一个比较完整的示例:

class ModifyLinkFilter {
    protected $_prio = 10;
    protected $_args;

    public function __construct($addargs = array(), $prio = 10) {
        $this->_args = $addargs;
        $this->_prio = $prio;

        if(!empty($addargs)) {
            $this->register();
        }
    }

    public function register() {
        add_filter('wp_get_nav_menu_items',
            array($this, 'on_nav_items'), $this->_prio, 3);
    }

    public function unregister() {
        remove_filter('wp_get_nav_menu_items',
            array($this, 'on_nav_items'), $this->_prio, 3);
    }

    public function on_nav_items($items, $menu, $args) {
        foreach($items as $item) {
            if(!empty($item->url)) {
                $item->url = self::modifyUrlSimple($item->url, $this->_args);
            }
        }
        return $items;
    }

    public static function modifyUrlSimple($url, $query) {
        $url .= strchr($url, '?') === false ? '?' : '&';
        $url .= http_build_query($query);
        return $url;
    }
}


// You can use the class like that
$language = "de";
$args = array('lang' => $language, 'foo' => 'bar');
$linkfilter = new ModifyLinkFilter($args); 
wp_nav_menu();
$linkfilter->unregister();    
这将修改导航菜单中的每个项目。因此,如果您有一个外部链接,它也将被更改

另外,修改URL并不像看上去那么容易。一个项目的URL可以是
/blabla?myvalue=5#anchor
,修改后看起来像
/blabla?myvalue=5#anchor&lang=de&foo=bar