“禁用”某些页面上的特定插件

时间:2022-01-08 作者:tim

我想禁用特定FrontPage上的特定插件,但不是;禁用(&Q);它们在后端,即在DB中真正禁用它们。只是不要加载它们,就像它们没有安装一样。

代码中很早就通过mu插件实现了这一点:

function strposa($haystack, $needles=array(), $offset=0) { // Like strpos for an Array of needles
    foreach($needles as $needle) {
        if(strpos($haystack, $needle, $offset) !== false)
            return true;
    }
    return false;
}

add_filter(\'option_active_plugins\', function ($plugins)
{    
    if(!wp_doing_ajax() && !wp_doing_cron() && !is_admin()) 
    {
        $remove_plugins_frontpage = array(\'duplicator-pro\', 
                                          \'block-specific-plugin-updates\', 
                                          \'delete-expired-transients\');
        foreach($plugins as $key => $plug) {
            if(strposa($plug, $remove_plugins_frontpage))
                unset($plugins[ $key ]);        
        }
    }       

    return $plugins;
});
例如,像不会安装复印机那样做,因为我不需要在前端执行所有前端操作。我只需要在后端和Cron调用期间使用复印机。

不幸的是,这也会在DB中禁用上面提到的插件。这意味着:当我转到后端时,那些插件被禁用,这非常糟糕。

有没有办法绕过这个问题?

非常感谢

1 个回复
SO网友:tim

我发现代码有问题:

代码很好,基本正常。

唯一的问题是:如果安装了特定的插件,它们会请求激活插件的选项,并将其写回数据库;“排序”;激活顺序。E、 g.WPML,需要/希望尽快激活。因此,如果使用上面的代码,如果使用WPML或类似的方法,基本上可以完全停用DB中的特定插件。

这就是为什么必须添加一项内容:仅当wp\\u get\\u active\\u and\\u valid\\u plugins()调用函数时,才检查是否应用过滤器:

function strposa($haystack, $needles=array(), $offset=0) { // Like strpos for an Array of needles
    foreach($needles as $needle) {
        if(strpos($haystack, $needle, $offset) !== false)
            return true;
    }
    return false;
}

add_filter(\'option_active_plugins\', function ($plugins)
{    
    $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 7); # Limit 7
    $called_by = false;
    foreach($trace as $entry) {
        if(@$entry[\'function\'] == \'wp_get_active_and_valid_plugins\') {
            $called_by = true;
            break;
        }
    }
    if(!$called_by) 
        return $plugins; # Only modify the option when called by wp_get_active_and_valid_plugins()
        
    if(!wp_doing_ajax() && !wp_doing_cron() && !is_admin()) 
    {
        $remove_plugins_frontpage = array(\'duplicator-pro\', 
                                          \'block-specific-plugin-updates\', 
                                          \'delete-expired-transients\');
        foreach($plugins as $key => $plug) {
            if(strposa($plug, $remove_plugins_frontpage))
                unset($plugins[ $key ]);        
        }
    }       

    return $plugins;
});

相关推荐

如何清理wp-content/plugins/wordpress-seo中不必要的文件?

我目前维护Wordpress网站7年。磁盘使用率最近已满,因此我需要定期检查自动备份并保存这些备份,然后将其从服务器中删除。当我检查时,插件文件夹中的wordpress seo文件夹(这是Yoast seo默认插件文件夹)占用了太多空间。据我所知,它充满了各种版本的插件文件。确切地说,它位于wordpress seo插件的js/dist文件夹中。它包含几种类型的小型javascript,每个名称的末尾都有某种序列或版本号,总容量约为250-300 MB。我可以清理这些文件吗?如果是,是否安全?如果我从以前