を使用してwp_nav_menu()
、生成されたリンクの URL を変更して、各 URL の末尾に言語コードを追加するhttp://www.example.com/
方法http://www.example.com/?lang=$language
質問する
569 次
1 に答える
1
wp_nav_menu
-filter を使用しての動作を変更できますwp_get_nav_menu_items
。やや完全な例を次に示します。
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
になります。
于 2013-02-17T09:48:48.647 に答える