2013-02-17 40 views
0

使用wp_nav_menu(),我如何修改生成的鏈接的網址以在每個網址的末尾添加語言代碼就像我有網址http://www.example.com/但我必須將語言參數追加到結果,所以url將是http://www.example.com/?lang=$languageWP Nav菜單使用語言代碼修改網址

回答

1

您可以使用wp_get_nav_menu_items-filter更改wp_nav_menu的行爲。這是一個有點完整的例子:

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

+0

偉大的工作人爲你解決像一個主+1 – 2013-02-17 09:56:59