Rimozione del campo "Sito Web" dalle informazioni di contatto


9

Voglio rimuovere il campo del sito Web dalle informazioni di contatto dell'utente. Uso quanto segue per rimuovere AIM, Jabber e Yahoo IM. Ma non sono in grado di utilizzare questo per rimuovere il sito Web. Qualcuno per favore aiuti.

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

Risposte:


12

Risposta rivisitata e aggiornata:

Non è possibile utilizzare il user_contactmethodsfiltro per rimuovere il wrapper del sito Web, poiché questo pezzo è codificato nel user-edit.phpfile e non fa parte del ciclo dei contatti utente filtrabili , generato da:

wp_get_user_contact_methods( $profileuser )

Nascondendolo con CSS

L' elemento riga del sito Web ora ha la sua .user-url-wrapclasse:

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

In precedenza dovevamo utilizzare jQuery, come destinazione della riga principale del #urlcampo, per la rimozione.

Ma ora possiamo facilmente scegliere come target il wrapper del sito Web e nasconderlo con i CSS:

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

Nascondere altri campi

Esistono classi di riga simili:

tr.user-{field}-wrap

disponibile per i campi:

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

compresi tutti i campi dai metodi di contatti dinamici dell'utente .

Qui sostituiamo solo la {field}parte con il nome del campo corrispondente.

Screenshots

Prima di rimuovere la riga del sito Web: Prima


Dopo aver rimosso la riga del sito Web: Dopo


4
Dovresti usare .remove()invece di.hide()
Bainternet l'

Questo non funziona per me. Questo codice dovrebbe essere inserito in finctions.php giusto ??
MidhuN

Devi essere un non amministratore quando lo provi o commenti la iffrase con il test di capacità. Funziona functions.php, ma penso che sia meglio averlo in un plugin in modo da non perderlo quando si cambia il tema.
birgire

Che ne dici di questoapply_filters( "user_{$name}_label", $desc );
Brad Dalton, il

Questo modifica solo le etichette, per i metodi di contatto creati dinamicamente , ma non i campi di testo di input corrispondenti. Anche il campo del sito Web non fa parte di questi metodi di contatto dinamici . Sarebbe utile, tuttavia, avere tali filtri per tutte le user-*-wrapparti ;-) @BradDalton
birgire

5

Ho risolto il problema con le funzioni ob_ e DOMDocument. È meglio di jQuery o CSS per proteggere il modulo.

Uso questo tipo di soluzione ogni volta che non riesco ad accedere a una parte del contenuto HTML tramite un hook.

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

Ehi, è grandioso.
Michael Mizner,

2

Espandendo su @ birgire e giustificando la risposta di @Patricia Walton, se solo aggiungi

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

andrà solo dalla pagina in cui admin sta modificando un profilo. Per farlo scomparire anche quando un utente modifica il proprio profilo aggiungi anche

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, come questo:

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
Manca un terzo add_action per la nuova pagina utente:add_action('admin_head-user-new.php','remove_website_row_wpse_94963');
guidod

1

Il codice non funzionava neanche per me, ma cambiare l'add_action per puntare a profile.php ha funzionato.

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

Non riesco a vedere in cosa il codice che hai pubblicato differisca da @birgire one.
gmazzap

0

Espandendo la risposta di @ birgire, l'ho scritto in un array, quindi è un po 'più facile da leggere:

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' );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.