Как сохранить подменю плагина открытым при просмотре пользовательской версии users.php?

Вопрос или проблема

Я добавил в подменю my-plugin пользовательский вид списка пользователей, используя users.php и аргумент my_plugin_view для фильтрации запроса:

add_submenu_page(
            "my-plugin",
            'Подписчики',
            'Подписчики',
            'edit_users',
            'users.php?my_plugin_view=subscribers'
        );  

Когда открывается /users.php?my_plugin_view=subscribers, боковая панель администратора переключает Users > All Users вместо My Plugin > Subscribers.

Я пробовал:

if( isset($_GET['my_plugin_view']) ){

    remove_submenu_page( 'users.php' );
}

но это удаляет раздел All Users из боковой панели и не переключает меню плагина, как ожидалось.

Как сохранить открытым подменю плагина при просмотре пользовательской версии users.php?

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

Пример:

add_action('admin_menu', 'register_subscriber_submenu_page');

function wpdocs_register_subscriber_submenu_page() {
      add_submenu_page(
           'users.php',
           'Подписчики',
           'Подписчики',
           'manage_options',
           'custom-submenu-page', 
           'custom_callback_function'
      );
  }

Попробуйте добавить префикс к слугу вашей страницы плагина, вы можете столкнуться с конфликтом с таким именем: ‘subscribers’ -> your-plugin-subscribers.

Вы найдете больше деталей add_submenu_page

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

Ответ или решение

Чтобы удерживать подменю вашего плагина открытым при просмотре пользовательской версии users.php, вам необходимо использовать другой slug родительского меню. В текущей реализации вы добавляете подменю к users.php, что приводит к тому, что административное меню открывает раздел "Все пользователи" вместо вашего плагина.

Вот как вы можете это сделать:

  1. Измените родительский slug подменю на users.php, но так, чтобы это не вызывало конфликты в именах. Ваша новая функция регистрации подменю может выглядеть следующим образом:
add_action('admin_menu', 'wpdocs_register_subscriber_submenu_page');

function wpdocs_register_subscriber_submenu_page() {
    add_submenu_page(
        'users.php', // Родительский slug
        'Подписчики', // Заголовок страницы
        'Подписчики', // Название в меню
        'manage_options', // Возможности
        'your-plugin-subscribers', // Уникальный slug для страницы
        'custom_callback_function' // Функция обратного вызова
    );
}
  1. Помните, что вам необходимо создать функцию custom_callback_function, которая будет обрабатывать вывод вашей пользовательской страницы. Например:
function custom_callback_function() {
    // Ваш код для отображения страницы подписчиков
    echo '<h1>Список подписчиков</h1>';
    // Здесь добавьте необходимую логику для отображения пользователей
}
  1. Убедитесь, что вы добавляете уникальный slug для вашего плагина, чтобы избежать конфликтов с другими плагинами или встроенными функциями WordPress. Например, вместо просто ‘subscribers’ используйте your-plugin-subscribers.

Таким образом, когда вы будете открывать /users.php?my_plugin_view=subscribers, ваше подменю "Подписчики" будет оставаться открытым, так как оно зарегистрировано как подменю в разделе пользователей.

Дополнительно: Если вы хотите сохранить текущий стиль навигации и не отображать "Все пользователи", вам не нужно удалять его с помощью remove_submenu_page, просто убедитесь, что вы используете правильные аргументы при добавлении подменю, и используйте разные slugs, чтобы избежать конфликтов.

Надеюсь, это поможет вам решить вашу проблему!

Оцените материал
Добавить комментарий

Капча загружается...