2

私は現在、次のようなものを使用しています:

wp_nav_menu( array(
               'theme_location' => 'primary', 
               'container' => false, 
               'items_wrap' => '<ul id="primary-main-menu" class="primary-main-menu-en">%3$s</ul>',
               'fallback_cb' => false
));

次に、独自のクラスなどでかなり装飾されたメニューを取得しました。
しかし、別のよりトリッキーなステップは次のとおりです。

  • そのメニューオブジェクト出力内のURLリンクを置き換えるにはどうすればよいですか? (置き換えるには、例: www.domain1.comto www.domain2.com)
  • つまり、実際には内部の文字列を置き換えたいの%3$sです。方法?

注:
使用walkerしましたが、walker をitems_wrapオプションと一緒に使用できなかったか、出力が歪んでいます。だから私はあきらめたwalker。鋭いアイデアをお願いします。

4

1 に答える 1

3

独自の Walker クラスを定義する代わりに、 filter を使用してデフォルトの Walker にフックするだけですwalker_nav_menu_start_el。ここで、リンク HTML を出力前に変更できます。

以下は、ユースケースの実例です。

function mytheme_walk_nav_menu_items($output, $item, $depth, $args) {

    if ( $args['theme_location'] === 'primary' ) {
        $output = str_replace( 'www.domain1.com', 'www.domain2.com', $output );
    }

    return $output;
}
add_filter( 'walker_nav_menu_start_el', 'mytheme_walk_nav_menu_items', 10, 4 );
于 2013-02-18T09:51:46.463 に答える