在用户配置文件中添加额外的用户批准状态字段,仅对管理员可见,如果第一次在 wordpress 中选中复选框,则发送邮件?

Add exrtra user approve status filed in user profile, visible to admin only and send mail if checkbox is checked at first time in wordpress?

我想为管理员提供手动批准用户状态的功能。我能够提供此功能,但此功能存在一些问题。如何从用户角色的用户配置文件中隐藏此字段。即字段应该只对管理员可见。如果我使用 jQuery 从用户配置文件中隐藏此文件,那么当用户点击更新配置文件按钮时,值会更新。我希望值与所选的每个用户相同(由管理员设置)。如果从取消选中选中复选框,我也想向用户发送邮件,但目前它每次都在发送邮件。我该如何解决这个问题?

/** Add user approve field */ 
add_action( 'user_new_form', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );
add_action( 'show_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>
    <h2 class="user_prmission">User Permission</h3>

    <table class="form-table">
        <tr class="user-approve_status-wrap">
            <th><label for="dropdown">Approve User Permission</label></th>
            <td>
                <?php 
                    //get dropdown saved value
                    $checked = (isset($user->artwork_approved) && $user->artwork_approved) ? ' checked="checked"' : ''; 
                ?>

                <label for="artwork_approved">
                    <input name="artwork_approved" type="checkbox" id="artwork_approved" value="1" <?php echo $checked; ?>>
                    <?php _e('Approve Status','AA'); ?>
                </label>
            </td>
        </tr>
    </table>
<?php   
}

/* Update selected option **/
add_action( 'user_register', 'save_user_fields');
add_action( 'personal_options_update', 'save_user_fields' );
add_action( 'edit_user_profile_update', 'save_user_fields' );
function save_user_fields( $user_id ) {

    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;

    update_user_meta($user_id, 'artwork_approved', isset($_POST['artwork_approved']));

    /* Send email to agent to notify about thier account is approved. **/ 

     if (get_user_meta($user_id, 'artwork_approved', true)) {
        // sent mail if checkbox is selected from unchecked to checked,and hide this filed from user profile only visible to admin.
    }
}

我从你的问题中了解到,你在用户个人资料上添加了一个自定义字段,它是一个复选框。您希望该字段只能由管理员编辑,而不能由用户编辑。

如果这种理解是正确的,您可以在用户个人资料页面上呈现自定义字段时检查当前用户的用户能力。 这样,如果当前用户只有管理员权限,那么将呈现自定义字段。如果非管理员用户登录,则不会呈现自定义字段。

此外,在您添加自定义字段的函数中,无论是否选中,您都将复选框的值设置为“1”。我想这导致每次都发送电子邮件。您应该根据您的情况设置复选框的值。

这样你添加自定义字段的函数就会变成下面这样

/** Add user approve field */ 
add_action( 'user_new_form', 'Add_user_fields' );
add_action( 'edit_user_profile', 'Add_user_fields' );
add_action( 'show_user_profile', 'Add_user_fields' );

function Add_user_fields( $user ) { ?>
    if( !current_user_can( 'manage_options' ) ){
        return;
    }
    <h2 class="user_prmission">User Permission</h3>
    <table class="form-table">
    <tr class="user-approve_status-wrap">
        <th><label for="dropdown">Approve User Permission</label></th>
        <td>
            <?php 
                //get dropdown saved value
                if( isset($user->artwork_approved) && $user->artwork_approved ){
                     $checked = 'checked="checked"';
                     $value = '1';
                }else{
                     $checked = null;
                     $value = null;
                }
            ?>

            <label for="artwork_approved">
                <input name="artwork_approved" type="checkbox" id="artwork_approved" value="<?php echo $value; ?>" <?php echo $checked; ?>>
                <?php _e('Approve Status','AA'); ?>
            </label>
        </td>
    </tr>
    </table>
    <?php   
    }

希望对您有所帮助。