仅在Wordpress首页/主页上禁用特定插件

时间:2016-03-17 01:48:36

标签: php wordpress optimization wordpress-plugin

我试图在Wordpress首页上禁用插件,使其更轻一些。我只希望在显示首页时禁用它。

我得到了这个工作代码,我放入了wp-content / mu-plugins / 它禁用除指定/子页面/之外的所有页面上的一个插件 这很好,但这并不是我追求的目标。

如何在查看首页时更改此代码以禁用插件?

以下是代码:

add_filter( 'option_active_plugins', 'lg_disable_plugin' );
function lg_disable_plugin($plugins){

    if(strpos($_SERVER['REQUEST_URI'], '/subpage/') === FALSE AND strpos($_SERVER['REQUEST_URI'], '/wp-admin/') === FALSE) {

        $key = array_search( 'was-this-helpful-pro/was-this-helpful-pro.php' , $plugins );

        if ( false !== $key ) {
            unset( $plugins[$key] );
        }
    }

    return $plugins;
}

我还发现了另一个适用于其他页面的代码.... 但是同样的故事,我无法弄清楚如何使它适用于首页,只适用于子页面**

$listener_term = '/subpage/';
$current_url   = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '';

// listener for the thin load
if ( strstr( $current_url, $listener_term ) ) {
 add_filter( 'option_active_plugins', 'api_request_disable_plugin' );
}
function api_request_disable_plugin( $plugins ) {
 $plugins_not_needed = array(
 'backupwordpress/backupwordpress.php',
 'wordfence/wordfence.php',
 'contact-form-7-to-database-extension/contact-form-7-db.php',
 'contact-form-7/wp-contact-form-7.php',
 'wp-piwik/wp-piwik.php',
 'simple-responsive-slider/simple-responsive-slider.php',
 'google-sitemap-plugin/google-sitemap-plugin.php',
 'category-page-icons/menu-compouser.php',
 'easy-fancybox/easy-fancybox.php',
 'business-owner-switch/business-owner-switch.php',
 'wordpress-seo/wp-seo.php'
 );

 foreach ( $plugins_not_needed as $plugin ) {
 $key = array_search( $plugin, $plugins );
 if ( false !== $key ) {
 unset( $plugins[ $key ] );
 }
 }

 return $plugins;
}

有什么想法吗?

我想我应该提一下:

  1. 第一个示例将禁用除/ subpage /
  2. 之外的所有页面上的插件
  3. 第二个代码将禁用/ subpage /
  4. 上列出的所有插件

    无论我尝试什么,它们都不适用于首页/主页。

3 个答案:

答案 0 :(得分:4)

我没有意识到你希望它发生在首页上 - 代码段建议你也想要它在其他页面上。

我之前建议您可以使用is_home或is_front_page,但是在我们这样做的阶段,它们尚未加载 - 所以这里的替代方法是加载REQUEST_URI并查看它是否为空。如果它是空白的,我们将假设我们在主页上 - 为了满足可能不在根目录的安装,我们将URL与网站的相对主页位置进行比较 - 为了增加安全性,我们将其封装在htmlspecialcharacters中(可能没有必要) )。

也许尝试这样的事情(看起来,这可能不是最好的方法,但它确实对我有用):

add_filter( 'option_active_plugins', 'lg_disable_plugin' );
function lg_disable_plugin($plugins){
    if (htmlspecialchars(trim(wp_make_link_relative(get_site_url()),'/')) == htmlspecialchars(trim($_SERVER['REQUEST_URI'],'/'))) {
        $key = array_search( 'was-this-helpful-pro/was-this-helpful-pro.php' , $plugins );
        if ( false !== $key ) {
            unset( $plugins[$key] );
        }
    }

    return $plugins;
}

如果您想为多个插件执行此操作,可以将代码更改为以下内容:

    add_filter( 'option_active_plugins', 'lg_disable_plugin' );
    function lg_disable_plugin($plugins){
        if (htmlspecialchars(trim(wp_make_link_relative(get_site_url()),'/')) == htmlspecialchars(trim($_SERVER['REQUEST_URI'],'/'))) {
            $plugins_not_needed = array ('was-this-helpful-pro/was-this-helpful-pro.php',
           'pluginfolder/plugin-name.php');
            foreach ( $plugins_not_needed as $plugin ) {
                $key = array_search( $plugin, $plugins );
                if ( false !== $key ) {
                    unset( $plugins[ $key ] );
                }
            }
        }

        return $plugins;
    }

答案 1 :(得分:0)

您可以编写一个mu插件,如果没有,请在“ wp-content”文件夹中创建一个名为“ mu-plugins”的文件夹,然后创建一个PHP文件,您可以在其中编写并尝试以下代码:

if( !is_admin() && empty( $_POST ) ){
    $uri = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $uriArr = explode( '?',$uri );
    $uri = $uriArr[0];
    $home_uri = str_replace( 'https://','',str_replace( 'http://','',home_url( '/' ) ) );
    if ( $uri === $home_uri ) {
        $paths = array(
            'plugin_folder1/plugin1.php'
            'plugin_folder2/plugin2.php'
        );
        global $paths;
        add_filter( 'option_active_plugins', 'my_option_active_plugins' );
    }
}

function my_option_active_plugins( $plugins ){
    global $paths;
    foreach( $paths as $path ){
        $k = array_search( $path, $plugins );
        if( false !== $k ){
            unset( $plugins[$k] );
        }
    }

    return $plugins;
}

只需将“ plugin_folder1 / plugin1.php”替换为您要停用的插件

另一种选择是安装免费的插件Freesoul停用插件,您将能够轻松地停用每个页面,帖子,自定义帖子和存档所需的插件。

答案 2 :(得分:0)

这是我写的一个抽象,它允许您指定路由并将其传递给插件列表。将插件打印到日志或屏幕上以获取它们的名称,然后将它们添加到阵列中即可对其进行过滤。

要考虑的另一种方法是用白名单替换目标,因此您必须为每个路由定义更少的内容(如果要使用的插件很多)。

sameProp

可以将其扩展为使用针(路线)阵列,该阵列具有要删除的插件阵列,以进行更多控制。

类似的东西:

not