Как отобразить панель администратора при использовании WP_USE_THEMES = false?

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

Я использую WordPress в «безтемовом» режиме, т.е. не использую шаблон “блога”. Файлы моего сайта находятся в корневом каталоге (не в папке темы), а WordPress установлен в своем собственном каталоге /wordpress/. Единственная цель существования моей темы – это настройка бэкэнда, включая ребрендинг и пользовательские типы записей. (Я в основном избегаю плагинов и виджетов, и делаю индивидуальную реализацию WordPress)

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

ПРИМЕЧАНИЕ: Я пытался добавить wp_head() и wp_footer(), но безрезультатно. Думаю, это может быть связано с моей пользовательской структурой файлов.

require_once 'wordpress/wp-load.php';
wp_footer();

Возможно, вам нужно удалить некоторые вещи из файла нижнего колонтитула (например, Powered By WordPress). С помощью var_dump( $wp_actions ); вы можете увидеть, какие действия были выполнены (список хуков действий). А с помощью var_dump( $wp_filter['wp_footer'] ); вы можете увидеть, какие действия зарегистрированы для конкретного хука (в данном случае wp_footer).

Если WordPress загружается из внешнего PHP файла с помощью подключения wp-blog-header.php и константа WP_USE_THEMES установлена в false, то хук template_redirect не будет вызван. Это важно, потому что template_redirect – это то, как панель инструментов инициализируется на фронтенде. Заглянув в default-filters.php, мы можем увидеть, где инициализируется панель инструментов:

...
// Админ панель
// Не удаляйте. Неверный способ отключения.
add_action( 'template_redirect', '_wp_admin_bar_init', 0 ); // <-- инициализация панели инструментов
add_action( 'admin_init', '_wp_admin_bar_init' ); // <-- инициализация панели инструментов
add_action( 'before_signup_header', '_wp_admin_bar_init' ); // <-- инициализация панели инструментов
add_action( 'activate_header', '_wp_admin_bar_init' ); // <-- инициализация панели инструментов
add_action( 'wp_footer', 'wp_admin_bar_render', 1000 );
add_action( 'in_admin_header', 'wp_admin_bar_render', 0 );
...

Функцию можно добавить через плагин или тему для инициирования инициализации панели инструментов:

function wpse240134_wp_admin_bar_init() {
    _wp_admin_bar_init();
}
add_action( 'init', 'wpse240134_wp_admin_bar_init' );

Обратите внимание, что _wp_admin_bar_init() считается внутренней функцией для WordPress, так что используйте ее на свой страх и риск.

Смотрите также Админ панель (Toolbar) не отображается в пользовательском PHP файле, который загружает WordPress.

Дополнительные сведения о загрузке WP с использованием внешнего PHP файла: Какой правильный способ использования функций WordPress вне файлов WordPress?

.

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

Чтобы отображать админ-панель (Toolbar) WordPress при использовании WP_USE_THEMES = false, следует учитывать несколько исключительных моментов, связанных с архитектурой и конструкцией WordPress. Ниже представлено пошаговое руководство по решению этой задачи.

1. Определение проблемы

Когда установлен флаг WP_USE_THEMES = false, WordPress считает, что вы не используете никакие темы, и, соответственно, не вызывает ряд хуков, необходимых для инициализации админ-панели. Как следствие, админ-панель не отображается на фронтенде.

2. Инициализация админ-панели

Чтобы заставить админ-панель отображаться даже в этом режиме, необходимо вручную вызвать инициализацию админ-панели. Вы можете сделать это, добавив следующий код в ваш основной файл, который загружает WordPress:

require_once 'wordpress/wp-load.php';

// Инициализация админ-панели
function custom_admin_bar_init() {
    if (is_user_logged_in()) { // Проверяем, что пользователь авторизован
        _wp_admin_bar_init();
    }
}
add_action('init', 'custom_admin_bar_init');

wp_footer(); // Обязательно включите вызов wp_footer

3. Проверка прав доступа

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

4. Загрузка необходимых скриптов

Для корректной работы админ-панели также стоит убедиться, что соответствующие скрипты и стили загружаются. После добавления wp_footer(), вызовите следующий код:

if (is_user_logged_in()) {
    wp_enqueue_script('admin-bar'); // Подключаем скрипты админ-панели
    wp_enqueue_style('admin-bar'); // Подключаем стили админ-панели
}

5. Убедитесь, что хуки срабатывают

Использование методов для отладки, таких как var_dump($wp_actions); и var_dump($wp_filter['wp_footer']);, позволит вам проверить, какие хуки вызываются во время исполнения. Это поможет диагностировать проблемы и убедиться, что ваша настройка работает корректно.

6. Рекомендации по безопасности

_Важно понимать, что использование и вызов внутренних функций, таких как _wp_admin_bar_init(), сопряжено с определенными рисками, так как они могут изменяться в будущих версиях WordPress. Поэтому стоит следить за обновлениями WordPress и проверять документацию для любой новой информации по этому вопросу._

Заключение

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

Если у вас есть дополнительные вопросы или необходима помощь в реализации, не стесняйтесь обращаться!

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

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