Intereting Posts
Предотвратить изменение wordpress после изменения ссылки Копировать и вставить пароль для комментариев Динамическая таблица данных из внешнего json-канала Удалить из отрывка Возможно ли установить изображение с внешним URL изображения используйте% post_title% в описании (все в одном пакете SEO) Пользовательский тип сообщения (Jigoshop): неожиданное значение для $ category_id (через $ term-> term_taxonomy_id) на реальном сервере Почему сброс пароля пользователя WordPress не работает? Использование AJAX в плагине для отправки формы – ДЕЙСТВИТЕЛЬНО запутано Служить другой теме, основанной на размере окна Почему так сложно показать URL-адрес текущей категории и как это сделать? Динамические закладки бутстрапа с post_title не отображают значение_content Как фильтровать переменные query_vars? Таблицы HTML в областях содержимого Сравнение запросов метаданных по запросу WQ

Получение настраиваемого элемента подменю admin для выделения, когда он активен

У меня есть настраиваемый тип сообщений, Jobs, с 3 таксономиями под ним в меню администратора.

Одной из таксономий является статус, который является активным или закрытым. Я хочу пункт меню в разделе «Рабочие места для активных рабочих мест». Я создал его с помощью этого кода

add_submenu_page( 'edit.php?post_type=jobs', 'Active Jobs', 'Active Jobs', 'manage_options', 'edit.php?post_type=jobs&jobstatus=67' ); 

Это работает отлично, за исключением того, что пункт меню «Задания» остается выделенным, когда активна опция меню «Активные вакансии». См. Снимок экрана

пример отображения подменю

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

На данный момент я не использую функцию обратного вызова, я просто выполняю тот же URL-адрес, что и параметр подменю по умолчанию, за исключением параметров запроса, которые фильтруют отображаемые сообщения. Если переместить это в функцию обратного вызова, это решит проблему, я могу это сделать. Но я не знаю, что нужно делать в функции обратного вызова. Я хочу показать стандартную страницу редактирования типа публикации, только с использованием фильтра таксономии. Спасибо за помощь

Solutions Collecting From Web of "Получение настраиваемого элемента подменю admin для выделения, когда он активен"

Я сделал эту работу, используя меню «Сообщения» и статус «Проект». Он использует jQuery для изменения классов элементов списка. Адаптируйте для работы с типом сообщения и URL-адресами.

Это результат:
дополнительный подменю

 add_action( 'admin_menu', 'wpse_44270_menu_admin' ); add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' ); function wpse_44270_menu_admin() { add_submenu_page( 'edit.php', 'Drafts', '<span id="my-draft-posts">Drafts</span>', 'edit_pages', 'edit.php?post_status=draft&post_type=post' ); } function wpse_44270_highlight_menu_item() { global $current_screen; // Not our post type, exit earlier if( 'post' != $current_screen->post_type ) return; if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] ) { ?> <script type="text/javascript"> jQuery(document).ready( function($) { var reference = $('#my-draft-posts').parent().parent(); // add highlighting to our custom submenu reference.addClass('current'); //remove higlighting from the default menu reference.parent().find('li:first').removeClass('current'); }); </script> <?php } } . add_action( 'admin_menu', 'wpse_44270_menu_admin' ); add_action( 'admin_head-edit.php', 'wpse_44270_highlight_menu_item' ); function wpse_44270_menu_admin() { add_submenu_page( 'edit.php', 'Drafts', '<span id="my-draft-posts">Drafts</span>', 'edit_pages', 'edit.php?post_status=draft&post_type=post' ); } function wpse_44270_highlight_menu_item() { global $current_screen; // Not our post type, exit earlier if( 'post' != $current_screen->post_type ) return; if( isset( $_GET['post_status'] ) && 'draft' == $_GET['post_status'] ) { ?> <script type="text/javascript"> jQuery(document).ready( function($) { var reference = $('#my-draft-posts').parent().parent(); // add highlighting to our custom submenu reference.addClass('current'); //remove higlighting from the default menu reference.parent().find('li:first').removeClass('current'); }); </script> <?php } } 

Вот решение, с которым я только что придумал, который не использует jQuery:

В parent_file wp-admin/menu-header.php есть фильтр parent_file который запускается прямо перед выводом меню. Встроенный комментарий говорит:

Для плагинов для перемещения вкладок подменю.

Это всего лишь фильтр глобальной переменной $parent_file и я не уверен, что он делает, но мы будем использовать этот фильтр, чтобы вместо этого изменить глобальную переменную $submenu_file , которая устанавливает выделенное подменю. Таким образом, это будет решение в вашем случае:

 add_filter('parent_file', 'wpse44270_parent_file'); function wpse44270_parent_file($parent_file){ global $submenu_file; if (isset($_GET['jobstatus']) && $_GET['jobstatus'] == 67) $submenu_file = 'edit.php?post_type=jobs&jobstatus=67'; return $parent_file; } 

Вы можете адаптировать это с любым форматированием URL. Например, я использую формат admin.php?page=my_plugin_slug&action=myaction для admin.php?page=my_plugin_slug&action=myaction моих подключаемых admin.php?page=my_plugin_slug&action=myaction поэтому я использовал это, чтобы выделить мои подменю:

 add_filter('parent_file', 'wpse44270_1_parent_file'); function wpse44270_1_parent_file($parent_file){ global $submenu_file; if (isset($_GET['page']) && isset($_GET['action'])) $submenu_file = $_GET['page'] . '&action=' . $_GET['action']; return $parent_file; } 

PS: Я также попробовал действие admin_menu чтобы установить $submenu_file , и он действительно работал в моем случае (пользовательская плагиновая страница / slug), но не для edit.php (ваш случай). Поэтому я искал другое действие / фильтр, который запускается позже, и это был parent_file .

я узнал, что вам также нужно использовать html-объекты для вашей ссылки. так как у вас есть

 add_submenu_page( 'edit.php?post_type=jobs', 'Active Jobs', 'Active Jobs', 'manage_options', 'edit.php?post_type=jobs&jobstatus=67' ); 

вы можете попытаться изменить амперсанд на его эквивалент сущности html

 &amp; 

так что вы бы

 add_submenu_page( 'edit.php?post_type=jobs', 'Active Jobs', 'Active Jobs', 'manage_options', 'edit.php?post_type=jobs&amp;jobstatus=67' ); 

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

 add_filter( 'parent_file', 'test_taxonomy_highlight' ); function test_taxonomy_highlight( $parent_file ){ global $submenu_file; echo '<pre>', var_dump( $submenu_file, htmlentities( $submenu_file ) ), '</pre>'; echo '<pre>', var_dump( $parent_file, htmlentities( $parent_file ) ), '</pre>'; return $parent_file; }