【问题标题】:Why does wpmu_new_user not fire inside of a plugin but does inside functions.php?为什么 wpmu_new_user 不在插件内部触发,但在 functions.php 内部触发?
【发布时间】:2014-06-27 07:28:22
【问题描述】:

我有一个项目要完成,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');
    }       
}   
 }

当您将sn-p 添加到functions.php 时,这非常有效。但是,当您将其添加到插件(进入 wp-content/plugins)然后在某些站点上被激活时,将无法正常工作。如果您可以自己尝试一下,您就会明白我的意思。我不明白为什么它不起作用。我需要它在插件内部并且可以工作。

【问题讨论】:

    标签: php wordpress wpmu


    【解决方案1】:

    只有一些广泛的调试才能回答这个问题......但是这种东西最好放在Must Use plugin中。

    必须使用的插件(又名 mu-plugins)是安装在内容文件夹内的特殊目录中的插件,并且在安装过程中的所有站点上都会自动启用。必须使用的插件不会显示在 wp-admin 的插件页面上的默认插件列表中——尽管它们确实出现在特殊的必须使用部分中——并且除非从必须使用的目录中删除插件文件,否则无法禁用,默认在 wp-content/mu-plugins 中。

    我不明白你为什么要使用 include_once,请测试一下,删除它。


    推测:

    • 作为一个普通插件,它应该是网络激活的,并尝试用以下方式封装动作:

      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);
      });
      
    • 也许您要放入主站点主题?

    【讨论】:

    • 我最终不得不使用 2 个插件,一个必须使用的插件和一个常规插件。各个站点需要选择激活或停用常规插件,必备插件会检查它们是否已激活,并将注册用户添加到已激活的用户中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多