0

環境

ナビゲーションにカスタム言語切り替えリンクを追加しようとしていました。問題は、2 つのメニューの場所header-mainfooter-main(これらはメニュー スラッグです) があることです。header-mainしかし、メニューには言語リンクのみが必要です。

現在、ワードプレスのコールバックwp_nav_menu_itemsは問題なく動作しますが、処理されたリンクがすべてのメニューの場所に追加されます。これがその作業コードです。

function icl_post_languages() {
    return icl_get_languages('skip_missing=1');
}

function get_translation_navigation() {
    $nav = '';
    $lang_nav = icl_post_languages();
    if (count($lang_nav) > 0) {
        foreach ($lang_nav as $item) {
            $nav .= '<li>';
            $nav .= '<a href="' . $item['url'] . '">' . $item['native_name'] . '</a>';
            $nav .= '</li>';
        }
    }
    return $nav;
}

add_filter('wp_nav_menu_items', 'add_translation_navigation');

function add_translation_navigation($menu) {
    $language_nav = get_translation_navigation();
    $menu = $menu . $language_nav;
    return $menu;
}

問題

しかし、ワードプレスフィルターを次のように変更すると:

add_filter('wp_nav_menu_header-main_items', 'add_translation_navigation');

そのため、フィルターはheader-mainメニューのみに適用されます。現在の言語がEnglishの場合は機能し、フィルターを起動しますが、言語が切り替えられたArabic場合はフィルターを起動しません。

Arabicまた、 用と用の 2 つの別個のメニューがありますEnglishが、両方の場所は同じです。header-main

4

2 に答える 2

0

ここで説明したように、WordPress が同じメニュー スラッグを持つ 2 つの異なるメニューを処理するとは思いません。したがって、スクリプトは 2 つのメニューのうち最初のメニューにのみ適用されます。

メニュースラッグを次のように変更することをお勧めします。

  • header-main-english
  • header-main-arabic

そして、単に追加するだけです:

add_filter('wp_nav_menu_header-main-english_items', 'add_translation_navigation');
add_filter('wp_nav_menu_header-main-arabic_items', 'add_translation_navigation');
于 2014-09-22T12:08:05.713 に答える