Добавить exrtra подтверждение пользователем статуса, сохраненного в профиле пользователя, видимое только для администратора, и отправлять почту, если флажок установлен впервые в WordPress? - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу дать функциональность администратору для подтверждения статуса пользователя вручную. Я был в состоянии дать эту функциональность, но возникли некоторые проблемы с этой функциональностью. Как я могу скрыть это поле из профиля пользователя для роли пользователя. поле должно быть видно только администратору. Если я скрываю это поле из профиля пользователя с помощью 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 Ответ

0 голосов
/ 05 ноября 2018

Из вашего вопроса я понимаю, что вы добавили в профиль пользователя специальное поле, которое является флажком. Вы хотите, чтобы это поле редактировалось только администраторами, а не пользователями.

Если это понимание верно, вы можете проверить пользовательские возможности текущего пользователя при отображении настраиваемого поля на странице профиля пользователя. Таким образом, если текущий пользователь имеет права администратора только тогда, настраиваемое поле будет обработано. Если пользователь не является администратором, пользовательское поле не будет отображено.

Кроме того, в вашей функции добавления настраиваемого поля вы устанавливаете значение флажка на «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   
    }

Надеюсь, это поможет.

...