通过主题禁用插件/插件操作


19

我已经在自己的网站上安装了Google Analyticator插件。我还使用MobilePress插件提供了一个针对非智能手机移动浏览器的主题。我已经设置了用于该主题的Google Analytics(分析)移动版,并希望禁用Analyticator插件,因为该插件包括对较大js文件的调用。

有谁知道是否可以使用functions.php或其他方法禁用插件?

我相信我已经找到了将功能添加到页面的代码,因此,如果无法禁用整个插件,是否可以停止执行操作?我试图直接禁用它们,但是没有运气。这是插件文件中的代码:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

我尝试通过以下方式删除这些操作:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

任何帮助是极大的赞赏。


对我来说,这应该在技术上可行,因此您运行该代码的时间有些错误(太早或太晚)。请提供更多信息。
拉斯特

是的,我认为它也可以。我对添加/删除操作没有太多的经验,所以我不确定如何进一步对其进行调试。即使EAMann的答案有效,您仍在寻找什么样的信息?
PNMG 2011年

我有些困惑-如果需要永久删除通过插件正常禁用插件,难道不是很容易吗?哪个EAMann的答案只能通过代码来完成。我以为您希望它在某些情况下动态禁用...
Rarst 2011年

我有一个常规主题,可以在任何普通的桌面浏览器的wordpress中设置。对于这个主题,我想使用GA插件。mobilepress插件使用php获取用户代理字符串,并为智能手机或非智能手机提供不同的主题。我想对非智能手机主题使用functions.php文件,以禁止GA插件仅将JS放在该主题的<head>中。仍然需要为其他两个主题(台式机和智能手机)启用它。这有助于澄清吗?
PNMG 2011年

是的,这就是我的想法。但是停用将只是永久禁用插件,并且它将一直处于关闭状态,直到显式激活为止。我认为它不适合您的用例。
拉斯特

Answers:


25

当WordPress激活插件时,它将调用该activate_plugin()函数。此功能可激活沙箱中的插件,并在成功后重定向到其他地方。一些作者已使用它来以编程方式激活插件依赖性。

还有另一个功能,它的功能deactivate_plugin()相反。实际上,这是当您单击“停用”或“禁用”时WordPress停用插件的方式。

要停用已安装的插件,只需调用:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

或者,一次停用多个插件:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

还有第二个参数(第一个是要禁用的插件的字符串或数组),使您可以禁用插件而无需调用停用挂钩。默认情况下,它设置为false,我建议您采用这种方式。除非出于某种原因要绕过停用,否则您将执行以下操作:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

这只会关闭插件,但不会激活已停用的已注册插件执行的任何操作。因此,如果该插件在停用时删除了选项或数据库表,则需要执行此“静默”停用以保留该信息并在其他地方使用。


很好的答案-而不是仅仅与另一个(相比)相比较,乏味的“这是一个网站”答案可能在附近。
编辑者

放置在functions.php中的此代码将停用管理员中的插件,从而将其与其他两个主题禁用。谢谢拉斯特指出。我只想对functions.php文件所在的一个主题禁用它。
PNMG

您一次只在给定站点上一次使用一个主题...但是,如果要在停用主题后重新激活插件,那也是可能的。
EAMann 2011年

11

这要归功于EAMann的出色回答,我认为这也可能对原始海报很有帮助...

我需要一个解决方案来确保用户在上载高级版本时停用了我的插件(以避免潜在的冲突)。以前,我使用is_plugin_active检测到它的状态,并显示了一条管理错误消息,提示用户将其关闭。这更顺畅...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

注意:似乎在register_activation_hook上不起作用,但是admin_init就像一个超级按钮一样工作。


1
只是要注意,我很确定is_plugin_active已经在deactivate_plugins挂钩中进行了检查,因此它不需要再次执行
Bryan Willis

1

这是我的解决方案,创建一个可以禁用其他插件的插件,如下所示:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

将其推送到生产环境,启用它,然后将数据库导入本地开发计算机。

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.