【问题标题】:Wordpress Ultimate Member Plugin – Set User Status to Awaiting Admin ApprovalWordpress Ultimate Member Plugin – 将用户状态设置为等待管理员批准
【发布时间】:2016-05-15 13:52:49
【问题描述】:

Wordpress Ultimate Member (UM) 插件允许我们通过 wp-admin 将新注册的用户设置为“待定”。

Pending 函数做了两件事:

  • 将用户状态设置为“等待管理员批准”
  • 向用户发送电子邮件

看这里:

function pending(){ 
global $ultimatemember; 
$this->set_status('awaiting_admin_review'); 
$ultimatemember->mail->send( um_user('user_email'), 'pending_email' );  

但是,如果用户编辑现有帐户,则无法将现有用户设置为“等待”管理员批准。

我不擅长 PHP,但我想出了一个挂钩到“um_user_edit_profile”操作,这样如果现有用户编辑他们的个人资料,状态就会更改为“待定”。

看这里:

// Set profile to under pending after edits
add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
if ( is_super_admin() ) {
    return false;
    } else { 
        global $ultimatemember; 
        $ultimatemember->user->pending(); 
    }
}

不幸的是,我刚刚发现在注册时也使用了“um_user_edit_profile”操作,所以我的钩子也在注册时触发,导致发送两封电子邮件。

我试图通过以下方式克服这个问题:

添加 if 语句,以便仅对登录用户触发该操作:

// Set profile to under review after edits
add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
if ( is_super_admin() ) {
    return false;
    } else {
if ( is_user_logged_in() ) {
        global $ultimatemember; 
        $ultimatemember->user->pending();
    }
}

通过尝试将状态设置为“等待管理员批准”而不包括电子邮件:

// Set profile to under review after edits
add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
if ( is_super_admin() ) {
    return false;
    } else { 
        global $ultimatemember; 
        $ultimatemember->set_status('awaiting_admin_review');
    }
}

// Set profile to under review after edits
add_action('um_user_edit_profile', 'um_post_edit_pending_hook', 10, 2); 
function um_post_edit_pending_hook($user_id, $args){ 
if ( is_super_admin() ) {
    return false;
    } else { 
        global $ultimatemember; 
        $this->set_status('awaiting_admin_review');
    }
}

我还尝试了太多其他变体,但所有变体都破坏了网站。

所以,我正在向社区寻求一些支持/指导,以了解如何在不发送电子邮件的情况下使用挂起功能,或者如何使用我的钩子将状态设置为“等待管理员审核”。

我一直在使用UM github repository 来帮助我研究 UM 代码:

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    经过相当多的进一步研究,我设法确定了 um_submit_form_profile 操作,该操作在用户编辑其个人资料时触发,但在注册时未使用,因此解决了注册时重复电子邮件的问题。

    这是我对新动作的原始钩子。当用户编辑他们的个人资料时,这会将用户状态设置为等待管理员审核。

    // Set profile to under pending after edits
    add_action('um_submit_form_profile', 'um_post_edit_pending_hook', 10, 2); 
    function um_post_edit_pending_hook($user_id, $args){ 
    if ( is_super_admin() ) {
        return false;
        } else { 
            global $ultimatemember; 
            $ultimatemember->user->pending(); 
        }
    }
    

    感谢插件作者之一 Champ Campo,我得到了一个更好的修复,它只是将帐户状态更改为等待管理员审核,而没有做任何其他事情。

    // Set profile to under review after edits
    add_action('um_user_edit_profile', 'um_post_edit_pending_hook');
    function um_post_edit_pending_hook( $args ){
        $user_id =  $args['user_id'];
        if ( is_super_admin() ) {
            return;
        }
            update_user_meta( $user_id, 'account_status', 'awaiting_admin_review');
    
    }
    

    【讨论】:

      【解决方案2】:

      我无法在 UM 2+ 中完成这项工作。但是,对于仍在为此苦苦挣扎的人,我确实找到了一种方法,将用户元更改附加到我发现的电子邮件通知 sn-p 的末尾。我还调整了电子邮件以包含个人资料中的“描述”字段,因此管理员可以立即查看它是否已被更改为包含任何不受欢迎的内容。

      /*function to notify admin of profile changes*/
      add_action( 'um_after_user_updated', 'my_after_user_updated', 10, 3 );
      function my_after_user_updated( $user_id, $args, $userinfo ) {
          um_fetch_user($user_id);
          $groupMember = um_user('display_name');
          $groupMmbr_name = um_user('user_login');
          $groupMmbr_hidden = um_user('hide_in_members');
          $groupMmbr_status = um_user('account_status');
          $groupMmbr_desc = um_user('description');
          $loggedIn_user = wp_get_current_user();
          $loggedIn_userEml =  $loggedIn_user->user_email;
          $headers = array('Content-Type: text/html; charset=UTF-8', 'Cc:your-cc-address@yourwebsite.com', 'Bcc:', 
          'From:Your Website <website@yourwebsite.com>', 'Reply-To:No-reply Email<noreply@yourwebsitesite.com>');
          wp_mail( 'your-admin-email-address@yourwebsite.com', 'The member profile '.$groupMember.' has been updated.', 
          'The <b>'.$groupMember.'</b> profile was updated by the user with this email address: '.$loggedIn_userEml.'. <a href="https://yourwebsite.com/member/'.$groupMmbr_name.'/?profiletab=main&um_action=edit"><br>
          <b>Click here</b></a> to visit this profile online.<br><br><i style="color:#767676; font-size:11px; text-align:center;"><b>NOTE:</b> you must be logged in first to see this profile.</i>
          <br><br>The new profile description is:<br><br>'.$groupMmbr_desc.'<br><br>',$headers);
          update_user_meta( $user_id, 'account_status', 'awaiting_admin_review');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多