Как загрузить плагин только при входе в систему?

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

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

Таким образом, я уменьшаю нагрузку на сайт, не загружая и не считывая все при каждом запросе на сайте.

Я думал о том, чтобы сделать нечто подобное, но пока не нашел более жизнеспособного способа.

$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, чтобы оставаться в курсе лучших практик разработки.

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

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