Intereting Posts
$ wpdb выбрать все мета для каждого сообщения Мне нужно показывать сообщения от клиента (Shortcode) Проблема с полем выбора ACF Pro Как изменить описание одного и того же изображения, которое можно найти в нескольких экземплярах? Переключить язык интерфейса на определенные страницы. Сортировка основного запроса по пользовательской таксономии фоновые изображения WP Supersized на главной странице Комментарии и даты публикации не отображаются правильно на странице "posts" защищенные паролем страницы и сообщения, не защищенные после ввода их 1 раз Добавить пункт меню профиля BuddyPress Переадресация в зависимости от выбранной категории Как я могу создать копию моего сайта в подкаталоге для тестирования темы? Есть ли плагин, который позволяет пользователю вашего сайта получать от вас электронное письмо с приложением? Добавить простой слайдер Nivo на сайт wordpress В jquery используйте переменную php для выполнения файла enqueued jquery

Пользовательские типы сообщений не выделяются в меню nav

Работа над сайтом театральных мероприятий. Структура требует нескольких отдельных областей событий, каждая из которых содержит события с перечислением верхней страницы в конкретной области и соответствующие отдельные страницы событий под листингом. Поскольку каждая из страниц области событий требует другого лечения, я подумал, что это хорошая ситуация для пользовательских типов сообщений, используя шаблоны single- [event] и archive- [event] для каждой области.

Я установил пользовательский интерфейс пользовательских сообщений, чтобы создать настраиваемые типы сообщений (включая соответствие пользовательской таксономии) и расширенные настраиваемые поля для создания мета-полей. Все идет нормально. Тип персонализированного архива (полный список событий в области) вытаскивает мета из единого настраиваемого типа сообщений, и обе страницы пользовательских сообщений отображаются правильно, за исключением одного: главное навигационное меню больше не выделяет активную веб-страницу в списке архива. [Примечание: есть много сообщений о том, как выделить подменю. Отдельные настраиваемые сообщения для соответствия родительскому элементу; Мне это не нужно, просто нужно, чтобы текущая область событий правильно отображалась в главном меню nav!]

Я понял, что создал свой главный навигатор, который включает области событий – с wp_nav_menu и register_nav_menus. Таким образом, области событий, соответствующие архивным сообщениям архива, были первоначально построены как страницы, а основной навигатор был настроен с использованием возможности перетаскивания WP Menu. WordPress правильно по умолчанию использует шаблон персонализированного шаблона archive- [event] (и игнорирует существующую страницу с тем же именем), а навигационное меню функционирует с точки зрения ссылок, но не выделяет ссылку на персонализированный пост архива в навигаторе. Страницы в основном навигаторе работают правильно.

Когда я проверяю вывод в области событий, есть класс «current_page_parent», прикрепленный к блогу Nav, но не «текущий пункт меню» в другом месте, который, как я полагаю, подходит для пользовательских сообщений. Я полагаю, что если wp_nav_menu предназначен только для страниц, это имеет смысл, поскольку записи в архиве верхнего уровня не будут распознаваться, но я не знаю, как это исправить. Я буду пытаться взломать, но хочу избежать, если возможно, ID-специфических или jQuery. Одна мысль заключалась бы в том, чтобы вытащить шаблон archive- [event] и использовать шаблон регулярной страницы для публикации, сохраняя сообщение об уникальном одностраничном событии [event]. Любая причина, притворяющаяся таким образом, не может работать? Спасибо за любой совет, надеюсь, что мне не хватает очевидного / легкого подхода.

Solutions Collecting From Web of "Пользовательские типы сообщений не выделяются в меню nav"

Я всегда считал это ошибкой, но если нет, это довольно смущает. У вас есть 2 вещи, которые нужно исправить: во-первых, чтобы не выделить элемент верхнего уровня «Блог», а второй – выделить соответствующий элемент верхнего уровня, под которым находится ваш единственный CPT.

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

В контейнер nav добавьте условие, которое идентифицирует, когда навигатор отображается на одном CPT:

<nav class="navsf<?php if (is_singular('news')) { echo ' fixhilite'; } ?>">

Затем вам нужно получить идентификатор для пункта меню «Блог» и для родительского пункта меню CPT (в этом примере «Новости»). Скажем, для «Блога» это следующее:

<li id="menu-item-29" ...>

И для «Новостей» это:

<li id="menu-item-30" ...>

В вашем CSS вы можете настроить таргетинг на эти элементы, чтобы изменить цвет текста или фона, чтобы выделить / не выделить элементы соответственно:

.navsf.fixhilite li#menu-item-29

.navsf.fixhilite li#menu-item-30

Ваша проблема, вероятно, решена уже давно. Во всяком случае, здесь может быть решение:

 public static function WPFilter_UpdateNavMenuCSS($classes, $item) { $pages = get_posts ( array ( 'post_type' => 'page', 'meta_key' => '_wp_page_template', 'meta_value' => 'page-works.php' ) ); if (is_array ( $pages ) && count ( $pages ) > 0) { $root_page = $pages [0]; if (is_singular ( self::id )) { if (( int ) $root_page->ID == ( int ) $item->object_id) { $classes [] = 'current_page_parent'; } else { $key = array_search ( 'current_page_parent', $classes ); if ($key) { unset ( $classes [$key] ); } } } } return $classes; } 

Просто измените этот метод в соответствии с вашими потребностями. Вы должны заменить page-works.php и self: id соответственно.

Для следующего вам необходимо зарегистрировать метод фильтрации для вызова, определенный выше:

 add_filter ( 'nav_menu_css_class', 'SimpleTheme\PostType\Portfolio::WPFilter_UpdateNavMenuCSS', 10, 2 ); 

Для этого решения требуется, чтобы у вас был настраиваемый шаблон страницы, чтобы отобразить список вашего настраиваемого типа сообщений, и этот шаблон выбран для страницы, которую вы хотите определить как родительскую.

Я предлагаю использовать jQuery как:

 <?php if(is_singular('your-custom-post-type')) : ?> <script> (function($) { $(document).ready(function() { $('#menu-item-20').addClass('current-menu-item'); }); })(jQuery); </script> <?php endif; ?> . <?php if(is_singular('your-custom-post-type')) : ?> <script> (function($) { $(document).ready(function() { $('#menu-item-20').addClass('current-menu-item'); }); })(jQuery); </script> <?php endif; ?> 

Готово.