Как в 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]); // выведем все данные по выводимым ссылкам
...
код из примера выше
 
Добавить Комментарий

Ваш ответ

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