Нацеливание на конкретное меню с помощью пунктов меню wp nav


Эй! Я добавил wp_loginout() в свой заголовок, используя фрагмент в моем functions.php :

    add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);
function add_login_logout_link($items, $args) {

        ob_start();
        wp_loginout('index.php');
        $loginoutlink = ob_get_contents();
        ob_end_clean();

        $items .= '<li>'. $loginoutlink .'</li>';

    return $items;
}

Дело в том, что он показывает ссылку для входа в систему в каждом из моих трех меню:

    function register_main_menus() {
   register_nav_menus(
      array(
         'primary-menu' => __( 'Primary Menu' ),
         'secondary-menu' => __( 'Secondary Menu' ),
         'footer-menu' => __( 'Footer Menu' ),
      )
   );
};

Я хотел бы настроить фильтр wp_nav_menu_items так, чтобы он включал только ссылку для входа в основное меню. Идеи? Заранее благодарю

 3
Author: Community, 2011-03-13

2 answers

Смотрите этот связанный с этим вопрос . Я думаю, в вашем случае вы бы завернули свой код в if( $args->theme_location == 'primary-menu' ).

 7
Author: Philip Arthur Moore, 2017-04-13 12:37:55

Пожалуйста, измените свой код следующим кодом Вы забыли добавить условие if ($args->theme_location == 'primary-menu') это условие проверяет, является ли меню основным меню или нет.

add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);
function add_login_logout_link($items, $args) {
    if ($args->theme_location == 'primary-menu') {
        ob_start();
        wp_loginout('index.php');
        $loginoutlink = ob_get_contents();
        ob_end_clean();
        $items .= '<li>' . $loginoutlink . '</li>';
        return $items;
    }
}

function register_main_menus() {
   register_nav_menus(
      array(
         'primary-menu' => __( 'Primary Menu' ),
         'secondary-menu' => __( 'Secondary Menu' ),
         'footer-menu' => __( 'Footer Menu' ),
      )
   );
};
 1
Author: Mr. HK, 2017-01-06 11:11:41