Как в wordpress не выводить пункт меню если пользователь не авторизирован?

Скажите как можно сделать так что бы пункт в меню не выводился не авторизированным пользователям моего сайта на вордпресс? Само меню я добавил через стандартный функционал в админки. Внешний вид -> Меню. Мне нужно не выводить только 1 пункт. Нашел плагин который дает возможность скрывать пункты меню, но не хотелось бы его использовать для такой небольшой задачи.

Добавить Комментарий
    Ответ

    Как вариант использовать плагин: nav-menu-roles

    Если хотите без плагина, то в файле functions.php нужно прописать такой код:

     function wp_get_nav_menu_object($items, $menu, $args) {
     if (!empty($items)) {
     $delete = array();
     foreach ($items as $key => $value) {
     // если пользователь не авторизован
     if (!is_user_logged_in()) {
     // если это пункт из моего меню
     if (in_array($items[$key]->object_id, array(1, 2, 3))) {
     $delete[] = $key;
     }
     }
     }
     }
    // удаляем пункты
     if (!empty($delete)) {
     foreach ($delete as $id) {
     unset($items[$id]);
     }
     }
    return $items;
     }
    add_filter('wp_get_nav_menu_items', 'wp_get_nav_menu_object', 10, 3);
     

    В данном кода я удаляю пункты меню с object_id равным 1,2 или 3. Вам нужно выбрать свои ссылки(свои параметры по которым вы будите отличать свою ссылку). Можно так же использовать object_id. Тогда вам нужно просто заменить значения 1,2 и 3 на свои. Посмотреть значение для каждой ссылки можно так:

    код из примера выше
    .....
     foreach ($items as $key => $value) {
    var_dimp($items[$key]); // выведем все данные по выводимым ссылкам
    ...
    код из примера выше
     
    Добавить Комментарий

    Ваш ответ

    Размещая свой ответ, вы соглашаетесь с правилами сайта.