如何只在登录时加载插件?

时间:2021-03-26 作者:Mr Candido

作为整个系统的性能问题,如果有办法的话,如何正确地使插件的代码仅在用户登录时读取或解释,因为它仅在用户登录时工作。

这样,我减少了站点上的负载,而不必运行或读取站点上的所有请求。

我曾想过做类似的事情,但我仍然没有找到一个更可行的方法

$pluginPath = \'myPlugin/myPlugin.php\';
if (is_plugin_active($pluginPath) && stripos($_SERVER[\'SCRIPT_NAME\'], \'wp-admin\') == true) {
...
}

3 个回复
SO网友:Antti Koskinen

当我创建自定义插件时,我倾向于添加一个init函数,其中包括其他插件文件、从这些文件到动作和挂钩的附加函数等。这样,我就有了插件引导的集中位置。然后将此init函数连接到plugins_loaded 如果我需要做一些依赖性检查,也就是说,需要安装一些其他插件并激活。

// your-main-plugin-file.php
add_action(\'plugins_loaded\', \'my_plugin_init\');
function my_plugin_init() {
    // check dependencies
    // include files
    // hook plugin function to actions and filters
    // etc...
}
但是plugins_loaded 如果您还需要检查是否有登录用户,则操作触发得太早。在这种情况下,将主init函数挂接到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();
    }
}
您可以在Action reference.

SO网友:PVee Marketing

is\\u user\\u logged\\u 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 );

}}
并在函数中调用它。php

add_action( \'wp_enqueue_scripts\', \'load_user_scripts\' );

SO网友:PVee Marketing

如果您对优化感兴趣,可以尝试许多优化插件中的一个,这些插件可以缩小和延迟脚本。我特别喜欢;“资产清理”;因为您可以禁用/删除特定页面上不必要的插件脚本(即主页上的CF7,或非Woocommerce页面上的任何Woocommerce插件)