我正在为我的一些教职员工设置一个儿童主题,作为主题的一部分,我希望在主题被激活的时候激活几个插件。因此,自然地,我使用了after_setup_theme操作并调用了我的安装函数。它工作得很好,但是它运行在每个请求上(管理和其他)。我通过将其添加到安装函数的末尾来证明这一点:
echo '<script type="text/javascript">alert("This action was run")</script>';
因此,在每个管理请求和每个前端请求上都有一个javascript警报(我有一个网络设置,所以很明显,在这个主题不活动的站点上,它没有运行该函数)。
所以问题是,这是个窃听器吗?我是不是做错什么了?下面是我使用的完整代码:
add_action( 'after_setup_theme', 'fwp_setup' );
function fwp_setup(){
// -- Unrelated code remove for the sake of brevity
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
activate_plugin('enable-media-replace/enable-media-replace.php');
activate_plugin('seo-image/seo-friendly-images.php');
activate_plugin('w3-total-cache/w3-total-cache.php');
echo '<script type="text/javascript">alert("This action was run")</script>';
}任何洞察力都将不胜感激!
发布于 2012-04-26 20:20:26
解决方案:after_switch_theme做了我在这里想做的事情。它会在主题切换到您的主题之后触发。下面提到的解决方案之一使用switch_theme。这没有期望的结果,因为它只发生在您的主题切换。
这里有一篇我作为参考的文章:http://core.trac.wordpress.org/ticket/7795#comment:29
这是我修改过的代码
add_action( 'after_switch_theme', 'fwp_theme_setup' );
function fwp_theme_setup(){
require_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/plugin.php');
activate_plugin('enable-media-replace/enable-media-replace.php');
activate_plugin('seo-image/seo-friendly-images.php');
activate_plugin('w3-total-cache/w3-total-cache.php');
}发布于 2012-04-26 12:30:50
after_setup_theme操作的目的是在每个WordPress负载上触发。它只是WordPress调用模板系统、确定主题的各种设置参数、然后继续后续处理的过程的一部分,例如确定要显示的正确模板等。
换句话说,after_setup_theme代表WordPress设置当前主题的点,而不是管理员激活和/或配置当前主题的点。
您正在寻找的是一个主题激活钩子,它目前是不可用的,但是正在考虑/发展中。
发布于 2012-05-05 01:35:41
更好的解决方案可能是使用托马斯格里芬插件激活脚本。这将提示用户在使用主题时安装您选择的插件。我认为这是一个很好的方式来区分插件和主题,并仍然得到它的使用。
在您的主题中,检查插件在使用它的功能之前是否是活动的。这将使用户有更多的选择和控制。
您可以使用背包轻松地设置激活脚本。
https://wordpress.stackexchange.com/questions/50298
复制相似问题