有人知道是否可以使用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');
非常感谢您的帮助。
#1 楼
当WordPress激活插件时,它将调用activate_plugin()
函数。此功能可激活沙箱中的插件,并在成功后重定向到其他地方。一些作者已使用它来以编程方式激活插件依赖项。还有另一个功能
deactivate_plugin()
,其功能与此相反。实际上,这是当您单击“停用”或“禁用”。要停用已安装的插件,只需调用:
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 );
这只会关闭插件,但不会触发任何操作已注册停用插件。因此,如果该插件在停用时删除了选项或数据库表,则您想执行此“静默”停用以保留该信息并在其他地方使用。
WordPress的《 HitchHacker指南》中的文档
评论
很好的答案-而不是仅仅与另一个(相比)相比较,乏味的“这是一个网站”答案可能在附近。
–编辑
2011年3月15日21:59
放置在functions.php中的此代码将停用管理员中的插件,从而将其与其他两个主题禁用。谢谢拉斯特指出。我只想对functions.php文件所在的一个主题禁用它。
–PNMG
2011年3月16日,1:19
您一次只在给定站点上一次使用一个主题...但是,如果要在停用主题后重新激活插件,那也是可能的。
–EAMann
2011年3月21日在14:35
#2 楼
这要归功于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却像超级按钮一样工作。
评论
只是要注意,我很确定is_plugin_active已经在deactivate_plugins挂钩中进行了检查,因此它不需要再次执行此操作
–布莱恩·威利斯(Bryan Willis)
2014年9月11日下午4:24
#3 楼
这是我的解决方案,创建一个可以禁用其他插件的插件,如下所示:/*
* 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);
}
将其推送到生产环境,启用它,然后将数据库导入本地开发人员机器。
来源
评论
对于我来说,这应该在技术上可行,因此您运行该代码的时间有些错误(太早或太晚)。请提供更多信息。是的,我认为它也可以。我对添加/删除操作没有太多的经验,所以我不确定如何进一步调试它。即使EAMann的答案行得通,您还在寻找什么样的信息?
我有点困惑-如果需要永久删除通过插件正常禁用插件,难道不是很容易吗?哪个EAMann的答案只能通过代码来完成。我以为您希望在某些情况下将其动态禁用...
我有一个常规主题,可以在任何普通的桌面浏览器的wordpress中设置。对于这个主题,我想使用GA插件。 mobilepress插件使用php获取用户代理字符串,并为智能手机或非智能手机提供不同的主题。我只想对非智能手机主题使用functions.php文件,以禁止GA插件仅将JS放在该主题的中。仍然需要为其他两个主题(台式机和智能手机)启用它。这有助于澄清吗?
是的,这就是我的想法。但是停用会永久禁用插件,并且会一直处于关闭状态,直到明确激活为止。我认为它不适合您的用例。