WP-加载而不加载插件

时间:2017-10-18 作者:Kevin

我正在为我的服务器构建一个“控制面板”,并希望使用我的Wordpress用户库来控制登录功能,以及能够显示一些帖子。

我已经设置了一些定义并包括wp负载:

define( \'COOKIE_DOMAIN\', false );
define( \'DISABLE_WP_CRON\', true );
define( \'WP_USE_THEMES\', false );
define( \'WP_CACHE\', false );
// define( \'SHORTINIT\', true );
include( \'/home/getyou/www/wp-load.php\' );
使用shortinit 根据定义,我能够利用一些功能,但是user 功能失败,没有它,我注意到我的w3 Total缓存正在缓存所有内容。

有没有办法继续使用wordpress的所有功能,但可能卸载或禁用此外部站点的w3 total缓存?

编辑

添加了mu-plugin 使用以下代码根据定义禁用所有插件MEDINIT

if ( defined( \'MEDINIT \') && MEDINIT ) {
    add_filter( \'option_active_plugins\', function ( $plugins ) {
        $plug_arr = get_plugins();
        foreach( $plug_arr as $k => $v){
            unset( $plugins[$k] );
        }
        return $plugins;
    } );
}
然而,当我打电话时var_dump( get_option(\'active_plugins\') ); 它仍然加载所有插件。

1 个回复
最合适的回答,由SO网友:majick 整理而成

你需要把这样的东西放在。必须使用插件文件夹中任何名称的php文件(/wp-content/mu-plugins/) 所以它在所有插件之前加载,所以你可以用它来过滤插件加载。。。

<?php 
if (defined(\'SHORTINIT\') && SHORTINIT) {
    add_filter(\'option_active_plugins\', \'shortinit_plugins_filter\');
    function shortinit_plugins_filter($plugins) {
        $noloadplugins = array(\'w3-total-cache\');
        foreach ($plugins as $i => $plugin) {
             if (in_array($plugin, $noloadplugins)) {unset($plugins[$i]);}
        }
        return $plugins;
    }
}
或者手动包含您需要的任何函数文件,以使事情正常工作。

UPDATE for Multisite

您需要在多站点上使用不同的过滤器,类似的东西应该可以工作,例如,对于blog ID 2。。。

<?php 
if (defined(\'SHORTINIT\') && SHORTINIT) {
    add_filter(\'site_option_active_plugins\', \'shortinit_site_plugins_filter\', 10, 3);
    function shortinit_site_plugins_filter($plugins, $option, $network_id) {
        if ($network_id == 2) {
            $noloadplugins = array(\'w3-total-cache\');
            foreach ($plugins as $i => $plugin) {
                 if (in_array($plugin, $noloadplugins)) {unset($plugins[$i]);}
            }
        }
        return $plugins;
    }
}
注意:如果要更改站点范围内的激活插件,则需要对网络范围内的激活插件进行进一步过滤,例如:

<?php 
if (defined(\'SHORTINIT\') && SHORTINIT) {
    add_filter(\'option_active_sitewide_plugins\', \'shortinit_network_plugins_filter\');
    function shortinit_network_plugins_filter($plugins) {
        if (get_current_blog() == 2) {
            $noloadplugins = array(\'w3-total-cache\');
            foreach ($plugins as $i => $plugin) {
                 if (in_array($plugin, $noloadplugins)) {unset($plugins[$i]);}
            }
        }
        return $plugins;
    }
}

结束