Intereting Posts
Как удалить роли пользователя? Текст кнопки меню изменения add_image_size пейзаж или портрет Параметры заголовка и нижнего колонтитула на страницах и сообщениях Импорт продуктов в WooCommerce с помощью CSV-страницы не открывается Как изменить порядок отображения пользователей в админке? Список настраиваемых типов сообщений, но перенаправляется на главную страницу как создать статическую главную страницу для моего блога в wordpress Медиа-библиотека не отображает изображения, но все еще подтверждает существование Как скрыть определенную часть панели управления для ролей, не связанных с администрированием? Есть ли метод has_more_tag () или эквивалент? Как сохранить изменения имени или слова Slug при использовании wp_update_term при сохранении? Поиск через пользовательский тип сообщения и настраиваемые поля занимает 5 минут Убедитесь, что в массиве сообщений есть сообщения из определенной категории Если поле ввода имеет значение Требуется другое поле – PHP

Nav Menu – добавление класса на основе мета ключей

Я пытаюсь найти способ, который изменяет классы различных пунктов меню навигации, в зависимости от значения мета-ключа на странице.

В настоящее время меню выглядит так:

<li class="menu-item-1">Menu item 1</li> <li class="menu-item-2">Menu item 2</li> <li class="menu-item-3">Menu item 3</li> <li class="menu-item-4">Menu item 4</li> <li class="menu-item-5">Menu item 5</li> 

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

 <li class="menu-item-1 pink">Menu item 1</li> <li class="menu-item-2 yellow">Menu item 2</li> <li class="menu-item-3 green">Menu item 3</li> <li class="menu-item-4 pink">Menu item 4</li> <li class="menu-item-5 bordeaux">Menu item 5</li> 

Это то, что у меня есть до сих пор:

 add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2); function special_nav_class($classes, $item){ global $post; $colorcode = get_post_meta($post->ID, 'color_dropdown', true); if(is_page()) { $classes[] = $colorcode; } return $classes; } 

Он делает то, что он добавляет мета-ключ к классам, но только при посещении страницы с присвоенным значением мета-ключа, а затем добавляет ее ко всем пунктам меню, что неверно.

Я не могу вернуться к редактору меню вручную, используя функцию класса CSS. Пользователь не будет иметь доступ к этой области, и очень важно, чтобы пользователь мог устанавливать разные классы через выпадающее меню метабок в реальном режиме редактирования страницы.

Некоторое время тянул мои волосы, и я не могу заставить его работать, разве это невозможно?

EDIT: ОБНОВЛЕНО МОЙ ВОПРОС

Ваш код не потому, что глобальная $post ссылается на просматриваемый пост / страницу (если есть …). Что передается с nav_menu_css_class – это пункт меню – это особый тип сообщения. Среди его свойств: object который хранит:

  • тип сообщения, если ссылка ссылается на сообщение
  • таксономия, если ссылка ссылается на страницу таксономии
  • «custom», если его пользовательская ссылка

Он также сохраняет object_id

  • идентификатор сообщения, если ссылка ссылается на сообщение
  • термин id, если ссылка ссылается на страницу с таксономией
  • идентификатор сообщения пользовательской ссылки

Поэтому в том, что вы хотите сделать, это проверить, действительно ли термин ссылается на сообщение (или пользовательский тип сообщения), а затем передать object_id в get_post_meta() :

 function wpse51076_special_nav_class($classes, $item){ if( 'post' == $item->object ){ $colorcode = get_post_meta($item->object_id, 'color_dropdown', true); $classes[] = $colorcode; } return $classes; } add_filter('nav_menu_css_class' , 'wpse51076_special_nav_class' , 10 , 2); 

Попробуйте это, не проверено.
Я заменил $post->ID с помощью $item->ID , должен работать.

 add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2); function special_nav_class($classes, $item){ global $post; $colorcode = get_post_meta($item->ID, 'color_dropdown', true); if(is_page()) { $classes[] = $colorcode; } return $classes; }