【发布时间】: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 代码:
【问题讨论】: