我有一个项目要完成WordPress多站点博客中的网站会自动将用户添加到相应的网站(启用插件的位置)
我希望我措辞正确。
问题:wpmu_new_user挂钩不会在插件内部触发但会在functions.php内部触发
这是我的代码:
add_action( 'wpmu_new_user', 'register_hack_action', 10, 1 );
add_action( 'wpmu_activate_user', 'register_hack_action', 10, 1);
function register_hack_action( $user_id ) {
$this_id = get_current_blog_id();
if ( !defined('ABSPATH') ) {
// do nothing
} else {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
}
$blog_list = get_blog_list( 0, 'all' );
foreach ($blog_list AS $blog) {
switch_to_blog($blog['blog_id']);
if ( is_plugin_active( 'register-hack/register-hack.php' ) ) {
// add user to blog
add_user_to_blog($blog['blog_id'], $user_id, 'subscriber');
}
}
}
将代码段添加到functions.php时,此功能完全正常。但是当你将它添加到插件(进入wp-content / plugins)然后在某些网站上激活时,就行不通。如果你能亲自尝试一下,你会明白我的意思..我不明白为什么它不起作用。我需要它在插件内部工作。
答案 0 :(得分:0)
只有一些广泛的调试可以解决这个问题......但是这种东西最好放在Must Use plugin内。
必须使用的插件(a.k.a.mu-plugins)是安装在内容文件夹内特殊目录中的插件,可在安装中的所有站点上自动启用。必须使用的插件不会显示在wp-admin的插件页面的默认插件列表中 - 尽管它们确实出现在特殊的必须使用部分中 - 并且除非从必须使用的目录中删除插件文件,否则无法禁用,默认情况下位于
wp-content/mu-plugins
。
我不明白为什么你要使用那个include_once
,请测试它删除它。
Especulations:
作为普通插件,应该是网络激活并尝试用以下方式封装动作:
add_action( 'plugins_loaded', function() {
add_action( 'wpmu_new_user', 'register_hack_action', 10, 1 );
add_action( 'wpmu_activate_user', 'register_hack_action', 10, 1);
});