Feld "Website" aus den Kontaktinformationen entfernen


8

Ich möchte das Website-Feld aus den Benutzerkontaktinformationen entfernen. Ich verwende Folgendes, um AIM, Jabber und Yahoo IM zu entfernen. Ich kann dies jedoch nicht verwenden, um die Website zu entfernen. Jemand bitte helfen.

function remove_contactmethods( $contactmethods ) {
    unset($contactmethods['aim']);
    unset($contactmethods['yim']);
    unset($contactmethods['jabber']);
    return $contactmethods;
}
add_filter('user_contactmethods','remove_contactmethods',10,1);

Antworten:


11

Überarbeitete und aktualisierte Antwort:

Wir können den user_contactmethodsFilter nicht zum Entfernen des Website-Wrappers verwenden, da dieses user-edit.phpTeil in der Datei fest codiert ist und nicht Teil der filterbaren Benutzerkontaktschleife ist, die generiert wird von:

wp_get_user_contact_methods( $profileuser )

Verstecke es mit CSS

Das Website- Zeilenelement hat jetzt eine eigene .user-url-wrapKlasse:

<tr class="user-url-wrap">
    <th><label for="url"><?php _e('Website') ?></label></th>
    <td>
        <input type="url" name="url" id="url" 
               value="<?php echo esc_attr( $profileuser->user_url ) ?>" 
               class="regular-text code" />
    </td>
</tr>

Zuvor mussten wir jQuery verwenden, um die übergeordnete Zeile des #urlFelds zum Entfernen anzuvisieren .

Aber jetzt können wir den Website- Wrapper ganz einfach als Ziel festlegen und ihn mit CSS ausblenden:

function remove_website_row_wpse_94963_css()
{
    echo '<style>tr.user-url-wrap{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'remove_website_row_wpse_94963_css' );
add_action( 'admin_head-profile.php',   'remove_website_row_wpse_94963_css' );

Andere Felder ausblenden

Es gibt ähnliche Zeilenklassen:

tr.user-{field}-wrap

verfügbar für die Felder:

admin-color,
comment-shortcuts,
admin-bar-front,
user-login,
role,
super-admin,
first-name, 
last-name, 
nickname, 
display-name, 
email,
description, 
pass1, 
pass2, 
sessions, 
capabilities,
...

einschließlich aller Felder aus den dynamischen Benutzerkontaktmethoden .

Hier ersetzen wir einfach das {field}Teil durch den entsprechenden Feldnamen.

Screenshots

Vor dem Entfernen der Websitezeile: Vor


Nach dem Entfernen der Website-Zeile: Nach


4
Sie sollten .remove()anstelle von.hide()
Bainternet

Das funktioniert bei mir nicht. Dieser Code sollte in finctions.php eingefügt werden, oder?
MidhuN

Sie müssen kein Administrator sein, wenn Sie es testen oder den ifSatz mit dem Fähigkeitstest auskommentieren. Es funktioniert in functions.php, aber ich denke, es ist besser, es in einem Plugin zu haben, damit Sie es nicht verlieren, wenn Sie das Thema ändern.
Birgire

Wie wäre es damitapply_filters( "user_{$name}_label", $desc );
Brad Dalton

Dadurch werden nur die Beschriftungen für die dynamisch erstellten Kontaktmethoden geändert , nicht jedoch die entsprechenden Eingabetextfelder. Das Website- Feld ist ebenfalls nicht Teil dieser dynamischen Kontaktmethoden . Es wäre jedoch praktisch, solche Filter für die gesamten user-*-wrapTeile zu haben ;-) @BradDalton
Birgire

5

Ich habe das Problem mit ob_ Funktionen und DOMDocument gelöst. Es ist besser als jQuery oder CSS, um das Formular zu schützen.

Ich verwende diese Art von Lösung jedes Mal, wenn ich nicht über einen Hook auf einen Teil des HTML-Inhalts zugreifen kann.

function remove_extra_field_profile()
{

    $current_file_url =  preg_replace( "#\?.*#" , "" , basename( $_SERVER['REQUEST_URI'] ) );

    if( $current_file_url == "profile.php" )
    {
        add_action( 'wp_loaded', function(){ ob_start("profile_callback"); } );
        add_action( 'shutdown', function(){ ob_end_flush(); } );
    }
}
add_action( 'init', 'remove_extra_field_profile' );


function profile_callback( $html )
{
    $profile_dom = new DOMDocument;
    $profile_dom->loadHTML( $html );

    $all_lines = $profile_dom->getElementsByTagname( 'tr' );

    $excludes = array(
        'user-rich-editing-wrap',
        'user-admin-color-wrap',
        'user-comment-shortcuts-wrap',
        'show-admin-bar user-admin-bar-front-wrap',
        'user-url-wrap',
        'user-description-wrap'
        );

    $deletes = array();

    foreach ( $all_lines as $line ) 
    {
        $tr_calss = $line->getAttribute("class");

        if( in_array( $tr_calss, $excludes ) )
        {
            $deletes[] = $line;
        }
    }

    $deletes[] = $profile_dom->getElementsByTagname( 'h2' )->item(0);

    foreach ($deletes as $delete) 
    {
        $delete->parentNode->removeChild( $delete );
    }

    return $profile_dom->saveHTML();
}

Hey, das ist großartig.
Michael Mizner

2

Erweitern Sie die Antwort von @ birgire und begründen Sie die Antwort von @Patricia Walton, wenn Sie nur hinzufügen

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');

Es wird nur von der Seite entfernt, auf der der Administrator ein Profil bearbeitet. Damit es auch verschwindet, wenn ein Benutzer sein eigenes Profil bearbeitet, fügen Sie es hinzu

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, so was:

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // hide only for non-admins
        echo "<script>jQuery(document).ready(function(){jQuery('#url').parents('tr').remove();});</script>";
    }
}
add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
add_action('admin_head-profile.php','remove_website_row_wpse_94963');

1
Sie vermissen ein Drittel add_action für die neue Benutzerseite:add_action('admin_head-user-new.php','remove_website_row_wpse_94963');
guidod

1

Der Code funktionierte auch nicht für mich, aber das Ändern der add_action in "profile.php" hat funktioniert.

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // hide only for non-admins
        echo "<script>jQuery(document).ready(function()    
            {jQuery('#url').parents('tr').remove();});</script>";
    }
}

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');

Ich kann nicht sehen, in welchem ​​Code Sie von @birgire one anders geschrieben haben.
gmazzap

0

Als Erweiterung der Antwort von @ birgire habe ich dies in ein Array geschrieben, damit es etwas einfacher zu lesen ist:

function awb_remove_user_profile_fields_with_css() {
//Hide unwanted fields in the user profile
$fieldsToHide = [
    'rich-editing',
    'admin-color',
    'comment-shortcuts',
    'admin-bar-front',
    'user-login',
    'role',
    'super-admin',
    //'first-name', 
    //'last-name', 
    'nickname', 
    'display-name', 
    //'email',
    'description', 
    //'pass1', 
    //'pass2', 
    'sessions', 
    'capabilities',
    'syntax-highlighting',
    'url'

    ];

    //add the CSS
    foreach ($fieldsToHide as $fieldToHide) {
        echo '<style>tr.user-'.$fieldToHide.'-wrap{ display: none; }</style>';
    }

    //fields that don't follow the wrapper naming convention
    echo '<style>tr.user-profile-picture{ display: none; }</style>';

    //all subheadings
    echo '<style>#your-profile h2{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'awb_remove_user_profile_fields_with_css' );
add_action( 'admin_head-profile.php',   'awb_remove_user_profile_fields_with_css' );
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.