为什么wpmu_new_user不是在插件内部触发,而是在functions.php内部触发?


Why does wpmu_new_user not fire inside of a plugin but does inside functions.php?

我有一个项目要完成的网站在一个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),然后在某些网站上被激活,只是不会工作。如果你自己试一试,你就会明白我的意思。我不明白为什么行不通。我需要它是插件和工作的内部

只有一些广泛的调试才能回答这个问题…但是这些东西最好放在必须使用的插件中。

必须使用的插件(又名mu-plugins)是安装在content文件夹内的特殊目录下的插件,并且在安装的所有站点上都自动启用。必须使用的插件不会显示在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);
    });
    
  • 也许你是把主网站的主题?