Вопрос или проблема
Что касается производительности всей системы, как правильно сделать так, чтобы код моего плагина читался или интерпретировался только тогда, когда пользователь вошел в систему, так как он должен работать только и исключительно при условии, что пользователь авторизован.
Таким образом, я уменьшаю нагрузку на сайт, не загружая и не считывая все при каждом запросе на сайте.
Я думал о том, чтобы сделать нечто подобное, но пока не нашел более жизнеспособного способа.
$pluginPath="myPlugin/myPlugin.php";
if (is_plugin_active($pluginPath) && stripos($_SERVER['SCRIPT_NAME'], 'wp-admin') == true) {
...
}
Когда я создаю пользовательские плагины, я склонен добавлять одну функцию инициализации, которая включает другие файлы плагина, прикрепляет функции из этих файлов к действиям и хукам и т.д. Таким образом, у меня есть централизованное место, где плагин инициализируется. Эта функция инициализации затем подключается к действию plugins_loaded
, если мне нужно выполнить какую-либо проверку зависимостей – то есть, другой плагин также должен быть установлен и активен.
// your-main-plugin-file.php
add_action('plugins_loaded', 'my_plugin_init');
function my_plugin_init() {
// проверка зависимостей
// включение файлов
// подключение функций плагина к действиям и фильтрам
// и т.д.
}
Но действие plugins_loaded
срабатывает слишком рано, если вам также нужно проверить, вошел ли пользователь в систему. В этом случае хорошим действием для подключения вашей главной функции инициализации будет init
, так как пользователь проходит аутентификацию к тому времени, когда оно срабатывает.
add_action('init', 'my_plugin_init_logged_in_users');
function my_plugin_init_logged_in_users() {
if ( is_user_logged_in() ) {
my_plugin_init();
}
}
Вы можете найти дополнительную информацию о различных действиях WP, их порядке и том, какие данные им доступны, когда они срабатывают, в Справочнике по действиям.
Функция is_user_logged_in() решит эту задачу. Предположим, вы загружаете скрипты только тогда, когда пользователь вошел в систему, вы можете написать:
function load_user_scripts(){
if ( is_user_logged_in() ) {
wp_enqueue_script( , , string[] $deps = array(), string|bool|null $ver = false, bool $in_footer = false );
}}
И вызовите ее в functions.php
add_action( 'wp_enqueue_scripts', 'load_user_scripts' );
Вам просто нужно будет поместить весь код из вашего основного файла плагина в условие if. Либо использовать is_admin(), либо is_user_logged_in() в зависимости от того, нужен ли плагин только для администраторов или для всех пользователей.
// your-main-plugin-file.php
if (is_admin()) {
//весь ваш другой код здесь
}
Ответ или решение
Чтобы оптимизировать производительность вашего WordPress-сайта и загружать код плагина только для авторизованных пользователей, вы можете воспользоваться несколькими подходами. В этом ответе мы подробно рассмотрим, как правильно реализовать загрузку вашего плагина только при входе пользователя в систему.
1. Инициализация плагина
Первым делом вам нужно изменить способ инициализации вашего плагина. Вместо использования хука plugins_loaded
, который срабатывает слишком рано и не позволяет проверять, вошел ли пользователь в систему, рекомендуется использовать хук init
. Этот хук срабатывает после того, как пользователь аутентифицирован.
add_action('init', 'my_plugin_init_logged_in_users');
function my_plugin_init_logged_in_users() {
if ( is_user_logged_in() ) {
my_plugin_init(); // Здесь вызывается ваша функция инициализации плагина
}
}
function my_plugin_init() {
// Ваш код инициализации плагина
}
2. Подключение скриптов и стилей
Для загрузки скриптов и стилей только для зарегистрированных пользователей вы можете воспользоваться функцией wp_enqueue_scripts
. Создайте функцию для подключения скриптов и добавьте условие проверки авторизованного пользователя.
function load_user_scripts() {
if ( is_user_logged_in() ) {
wp_enqueue_script('my-script', plugin_dir_url(__FILE__) . 'js/my-script.js', array('jquery'), null, true);
}
}
add_action( 'wp_enqueue_scripts', 'load_user_scripts' );
3. Оптимизация кода плагина
Если ваш код плагина включает в себя функции, которые не нужны для неавторизованных пользователей, вы можете заключить все основные функции плагина в условие проверки.
if (is_user_logged_in()) {
// Весь код вашего плагина здесь
}
Этот подход позволяет значительно снизить нагрузку на систему, так как код плагина будет интерпретироваться только для авторизованных пользователей.
4. Локализация и работа с зависимостями
Если ваш плагин требует наличия других плагинов или зависимостей, имеет смысл сделать это также в функции инициализации. Вы можете проверять зависимости и загружать необходимые файлы только для авторизованных пользователей.
function my_plugin_init_logged_in_users() {
if ( is_user_logged_in() ) {
// Проверка зависимостей
if ( is_plugin_active('some-plugin/some-plugin.php') ) {
require_once(plugin_dir_path(__FILE__) . 'dependencies/dependency-file.php');
}
// Основная инициализация вашего плагина
my_plugin_init();
}
}
5. Заключение
Применив вышеприведенные рекомендации, вы сможете снизить нагрузки на ваш WordPress-сайт, загружая код плагина только для авторизованных пользователей. Это не только улучшит производительность вашего сайта, но и создаст более удобный пользовательский опыт для авторизованных пользователей.
Следите за тем, чтобы ваш код оставался чистым и модульным, и всегда проверяйте на наличие потенциальных конфликтов с другими плагинами. Используйте возможности документации WordPress, чтобы оставаться в курсе лучших практик разработки.