Вопрос или проблема
Я использую 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 и позволяет вашим клиентам удобно управлять сайтом с фронтенда.
Если у вас есть дополнительные вопросы или необходима помощь в реализации, не стесняйтесь обращаться!