it-swarm.com.de

verhindern, dass Benutzer ihre E-Mail-Adresse ändern

weiß jemand, wie man die user-edit.php-Datei einbindet oder filtert, damit die E-Mail-Adresse eines Benutzers nicht bearbeitet werden kann, ähnlich wie der Benutzername deaktiviert ist .. ?? ..

ich kann die Core-Datei (Keuchen) bearbeiten und disabled = "disabled" in das Formular aufnehmen. Dies funktioniert, aber ich bin ratlos, wie die Deaktivierung über Hook oder Filter hinzugefügt werden soll.

ich kann auch eine Funktion wie diese ausführen, die die E-Mail-Adresse über CSS verbirgt

/* 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');

aber das rausziehen der ganzen email sieht so komisch aus und dann glaube ich, dass man mit einem dom editor wie firebug immer noch auf das email feld zugreifen kann und es so ändern kann ... ugh ...

idealerweise möchte ich diesen gesamten user-edit.php code von diesem ersetzen ->

<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>

zu so etwas ->

<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

vielen Dank im Voraus für alle Hinweise, die Sie teilen können ... Herzlichst, Chuck Scott

3
user3858

Keine exakte Antwort, aber um eine Änderung der E-Mail zu verhindern (tatsächliche Änderung, keine Feldbearbeitung), können Sie diese Aktion optimieren:

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;
}
3
Rarst

Dirty Hack, zögern Sie nicht zu ändern.

Nur Administratoren oder Benutzer mit edit_users "können" E-Mails ändern, andere nicht.

Theme 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="(\\[email protected]\\S+\\.\\w+)[^>]*\/>/'
        );

        $replacement = array(
            'E-mail',
            '<input type="hidden"\1value="\2" /> \2 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;
3
zeo

Sie können JQuery verwenden, um die E-Mail (und alle anderen Felder auf der Seite zum Bearbeiten des Profils) zu deaktivieren.

Zum Beispiel so etwas in einem Plugin:

  //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
    }
2
user4356

Zusätzlich zu Rarsts Antwort:

Um zu verhindern, dass sich die Server-Seite ändert

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;
}

So deaktivieren Sie die Felder des WordPress-Benutzer-E-Mail-Profils

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
}

Ressourcen

https://www.role-editor.com/hide-disable-wordpress-user-profile-fields/

2
RafaSashi