impede que os usuários alterem seus endereços de e-mail

3

alguém sabe como ligar ou filtrar o arquivo user-edit.php para que o endereço de e-mail de um usuário seja desabilitado para edição, da mesma forma que o nome de usuário está desabilitado .. ?? ..

eu posso editar o arquivo principal (gasp) e incluir disabled="disabled" no formulário e isso funciona, mas eu estou com uma perda de como adicionar a desativação via gancho ou filtro ..

eu também posso executar uma função como esta que oculta o endereço de e-mail via css

/* Change WordPress dashboard CSS */
function custom_admin_styles() {
echo '<style type="text/css">#email { display: none !important; }</style>';
}
add_action('admin_head', 'custom_admin_styles');

mas isso puxa todo o e-mail assim, a forma parece engraçada e então eu acredito que com um DOM Editor como o Firebug, ainda é possível acessar esse campo de e-mail, portanto, alterá-lo ... ugh ...

idealmente, eu gostaria de substituir todo este código user-edit.php desta - >

<label for="email"><?php _e('E-mail'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th><td><input type="text" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" disabled="disabled" class="regular-text" /> <span class="description"><?php _e('Emails cannot be changed.'); ?></span>

para algo assim - >

<label for="email"><?php _e('E-mail'); ?> </label></th><td><?php echo esc_attr($profileuser->user_email) ?>" Please Contact Tech support to change your email

agradeço antecipadamente por qualquer indicação que você possa compartilhar ... cordialmente, chuck scott

    
por 10.03.2011 / 21:59

5 respostas

3

Dirty hack, sinta-se à vontade para modificar.

Somente administradores ou usuários com o limite edit_users "podem alterar" o e-mail, outros não.

Tema functions.php:

class Edit_Email {
    function start() {
        ob_start();
    }

    function footer() {
        $content = ob_get_contents();

        ob_end_clean();

        $this->replace( $content );

        echo $content;
    }

    function replace( &$content ) {
        $pattern = array(
            '/E-mail <span.+?<\/span>/',
            '/<input type="text"(.*?)value="(\S+@\S+\.\w+)[^>]*\/>/'
        );

        $replacement = array(
            'E-mail',
            '<input type="hidden"value="" />  Please Contact Tech support to change your email.'
        );

        $content = preg_replace( $pattern, $replacement, $content );
    }
}

if ( ! current_user_can( 'edit_users' ) && ( $pagenow == 'profile.php' ) ) :
    $edit_email = new Edit_Email();
    $edit_email->start();

    add_action( 'admin_footer', array( &$edit_email, 'footer' ) );
endif;
    
por zeo 24.03.2011 / 08:27
2

Você pode usar o JQuery para desabilitar o email (e quaisquer outros campos na página de perfil de edição).

Por exemplo, algo assim em um plug-in:

  //Disables certain fields (email, password) in WP Admin edit user page (user-edit.php)
   global $pagenow;
   if ( $pagenow == 'user-edit.php' ) {
        add_action( 'admin_footer', 'disable_userprofile_fields' );
   }

    /**
    * Disables certain fields (email, password) in WP Admin edit user page (user-edit.php)
    */
    function disable_userprofile_fields() {
    ?>
        <script>
            jQuery(document).ready( function($) {
                if ( $('input[name=email]').length ) {
                    $('input[name=email]').attr("disabled", "disabled");
                }
                if ( $('input[name=pass1]').length ) {
                    $('input[name=pass1]').attr("disabled", "disabled");
                }
                if ( $('input[name=pass2]').length ) {
                    $('input[name=pass2]').attr("disabled", "disabled");
                }
            });
        </script>
    <?php
    }
    
por user4356 23.05.2012 / 19:20
2

Resposta não exata, mas para impedir a alteração de e-mail (alteração real, não edição de campo), você pode ajustar essa ação:

add_action( 'user_profile_update_errors', 'prevent_email_change', 10, 3 );

function prevent_email_change( $errors, $update, $user ) {

    $old = get_user_by('id', $user->ID);

    if( $user->user_email != $old->user_email   && (!current_user_can('create_users')) )
            $user->user_email = $old->user_email;
}
    
por Rarst 22.06.2011 / 23:45
2

Além da resposta de Rarst:

Para impedir o lado do servidor de alteração de email

add_action( 'user_profile_update_errors', 'prevent_email_change', 10, 3 );

function prevent_email_change( $errors, $update, $user ) {

    $old = get_user_by('id', $user->ID);

    if( $user->user_email != $old->user_email   && (!current_user_can('create_users')) )
            $user->user_email = $old->user_email;
}

Para desativar os campos de perfil de e-mail do usuário do WordPress

add_action('admin_init', 'user_profile_fields_disable');

function user_profile_fields_disable() {

    global $pagenow;

    // apply only to user profile or user edit pages
    if ($pagenow!=='profile.php' && $pagenow!=='user-edit.php') {
        return;
    }

    // do not change anything for the administrator
    if (current_user_can('administrator')) {
        return;
    }

    add_action( 'admin_footer', 'user_profile_fields_disable_js' );

}

function user_profile_fields_disable_js() {
?>
    <script>
        jQuery(document).ready( function($) {
            var fields_to_disable = ['email'];
            for(i=0; i<fields_to_disable.length; i++) {
                if ( $('#'+ fields_to_disable[i]).length ) {
                    $('#'+ fields_to_disable[i]).attr("disabled");
                    $('#'+ fields_to_disable[i]).after("<span class=\"description\"> " + fields_to_disable[i] + " cannot be changed.</span>");
                }
            }
        });
    </script>
<?php
}

Recursos

enlace

    
por RafaSashi 05.09.2016 / 13:16
0

O hack dado abaixo foi testado com o WordPress 3.1.

Abra user-edit.php , encontre:

<th><label for="email"><?php _e('E-mail'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
<td><input type="text" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" class="regular-text" /></span>

e substitua por:

<th><label for="email"><?php _e('E-mail'); ?> <span class="description"></span></label></th>
<td><input type="hidden" name="email" id="email" value="<?php echo esc_attr($profileuser->user_email) ?>" class="regular-text" /><?php echo esc_attr($profileuser->user_email) ?></span>

É apenas uma solução alternativa que remove visualmente a capacidade de alterar endereços de e-mail e não desabilitar o recurso.

    
por user4154 23.03.2011 / 10:40

Tags