Вручную выделите пункт меню администратора Wordpress - PullRequest
7 голосов
/ 22 февраля 2010

В меню «Страницы» на странице администрирования Wordpress я получил такой макет:

Страницы

  • Редактировать (URL: edit-pages.php)
  • Добавить новый (URL: page-new.php)
  • Специальные страницы (url: edit-pages.php? Special-pages = true)

Как вы можете видеть, я добавил новый элемент подменю под названием Special Pages, который в значительной степени является ссылкой на страницу редактирования с пользовательским фильтром. Поскольку Wordpress использует имя файла для идентификации и выделения элемента подменю, поэтому всякий раз, когда я нажимаю на «Специальные страницы», выбирается элемент «Изменить подменю». Есть ли способ заставить Wordpress вместо этого выбрать пункт меню Special Pages?

Приветствия

Ответы [ 5 ]

5 голосов
/ 04 марта 2015

лучшее решение:

add_filter('parent_file', 'my_plugin_select_submenu');
function my_plugin_select_submenu($file) {
        global $plugin_page;
        if ('__my-current-submenu-slug__' == $plugin_page) {
            $plugin_page = '__my-submenu-slug-to-select__';
        }
        return $file;
}
5 голосов
/ 05 марта 2012

Чтобы уточнить ответ Кена Ву, отредактируйте глобальные переменные $submenu_file и $parent_file. Например, чтобы выделить вашу страницу:

global $submenu_file;
$submenu_file = "edit-pages.php?special-pages=true";

Если вам нужно изменить выделенный элемент верхнего уровня, используйте $parent_file. Например, выделите страницу настроек «Запись»:

global $parent_file;
global $submenu_file;
$parent_file = 'options-general.php';
$submenu_file = 'options-writing.php';
3 голосов
/ 25 февраля 2010

Решение: используйте переменную $ submenu_file

$ submenu_file = "edit-pages.php? Special-pages = true"

2 голосов
/ 18 августа 2014

Спасибо Кен Ву и Джонатану Бринли. Используя ваши ответы, я наконец-то получил подсветку моего админ-меню для правильной работы. Поскольку я изо всех сил пытался заставить его работать, я хотел бы опубликовать весь результат здесь, чтобы другим людям было легче его найти:

Идея состоит в том, чтобы вызвать фильтр parent_file (недокументированный, так как многие части Wordpress не к сожалению). В моем случае я добавлял пользовательское меню вместо стандартного, созданного при создании пользовательского типа сообщения.

В своем пользовательском почтовом индексе я вызываю действие add_meta_boxes. В рамках этой ловушки я отправляю вызов на фильтр parent_file:

add_filter('parent_file',     array(&$this, 'highlight_admin_menu'));

_

Тогда вот как выглядит моя hightlight_admin_menu функция:

function highlight_admin_menu($some_slug){

  global $parent_file;

  $parent_file = 'post.php?post=149&action=edit';

  return $parent_file;
}

_

Это заставило мое меню правильно выделиться. Попробуйте поиграть со своим собственным кодом, чтобы узнать, куда следует вводить код add_filter('parent_file', ...). Найдите немного кода, выполняемого только при загрузке конкретной страницы, но достаточно скоро, чтобы все еще можно было изменить переменную $parent_file.

Надеюсь, это поможет!

1 голос
/ 06 июля 2016

Для изменения выделенного пункта меню для элемента подменю, правильный фильтр - submenu_file.

add_filter('submenu_file', 'menuBold');

static function menuBold($submenu_file)
{
    if ( checkProperPage($_GET) ) {
        // The address of the link to be highlighted
        return 'post-new?post_type=foobar&foo=bar';
    }

    // Don't change anything
    return $submenu_file;
}

Проверка происходит в файле ~/wp-admin/menu-header.php WP в строке 194 (Wordpress 4.5.3):

if ( isset( $submenu_file ) ) {
    if ( $submenu_file == $sub_item[2] )
        $class[] = 'current';
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...