Rimuovere il campo "Sito web" dalle informazioni di contatto

8 apr 2013, 09:28:18
Visualizzazioni: 17.8K
Voti: 13

Voglio rimuovere il campo sito web dalle informazioni di contatto utente. Utilizzo il seguente codice per rimuovere AIM, Jabber e Yahoo IM, ma non riesco a usarlo per rimuovere il sito web. Qualcuno può aiutarmi?

function remove_contactmethods( $contactmethods ) {
    // Rimuove i metodi di contatto AIM, Yahoo IM e Jabber
    unset($contactmethods['aim']);
    unset($contactmethods['yim']);
    unset($contactmethods['jabber']);
    return $contactmethods;
}
// Applica il filtro ai metodi di contatto utente
add_filter('user_contactmethods','remove_contactmethods',10,1);
0
Tutte le risposte alla domanda 5
6
14

Risposta rivista e aggiornata:

Non possiamo utilizzare il filtro user_contactmethods per rimuovere il wrapper del sito web, perché questa parte è hardcoded nel file user-edit.php e non fa parte del loop filtrato dei contatti utente, generato da:

wp_get_user_contact_methods( $profileuser )

Nasconderlo con CSS

L'elemento riga del sito web ora ha la sua classe .user-url-wrap:

<tr class="user-url-wrap">
    <th><label for="url"><?php _e('Sito web') ?></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 usare jQuery per individuare la riga genitore del campo #url e rimuoverla.

Ma ora possiamo facilmente individuare il wrapper del sito web e nasconderlo con 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

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

inclusi tutti i campi dei metodi dinamici dei contatti utente.

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

Screenshot

Prima di rimuovere la riga del sito web: Prima


Dopo aver rimosso la riga del sito web: Dopo

8 apr 2013 09:52:18
Commenti

Dovresti usare .remove() invece di .hide()

Bainternet Bainternet
8 apr 2013 10:18:17

Non funziona per me. Questo codice dovrebbe essere inserito in functions.php giusto??

MidhuN MidhuN
8 apr 2013 10:25:42

Devi essere un non-admin quando lo testi oppure commenta la frase if con il test delle capability. Funziona in functions.php, ma penso sia meglio averlo in un plugin così non lo perdi quando cambi tema.

birgire birgire
8 apr 2013 10:34:50

Che ne dici di questo apply_filters( "user_{$name}_label", $desc );

Brad Dalton Brad Dalton
11 lug 2015 01:51:34

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

birgire birgire
11 lug 2015 02:15:01

Pensavo fosse così. Buona occasione per proporre un miglioramento.

Brad Dalton Brad Dalton
11 lug 2015 03:11:05
Mostra i restanti 1 commenti
1

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

Utilizzo questo tipo di soluzione ogni volta che non posso 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();
}
24 mag 2016 22:02:42
Commenti

Ehi, questo è fantastico.

Michael Mizner Michael Mizner
8 dic 2017 02:46:08
1

Ampliando la risposta di @birgire e confermando quella di @Patricia Walton, se aggiungi solo

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

il campo verrà rimosso solo dalla pagina dove l'amministratore modifica un profilo. Per farlo sparire anche quando un utente modifica il proprio profilo, aggiungi anche

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

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // nascondi solo per gli utenti non amministratori
        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');
24 ott 2013 14:52:46
Commenti

Ti manca un terzo add_action per la pagina di creazione del nuovo utente: add_action('admin_head-user-new.php','remove_website_row_wpse_94963');

guidod guidod
6 apr 2020 16:28:25
1

Anche per me il codice non funzionava, ma modificando l'add_action per puntare a profile.php ha funzionato.

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // nasconde solo per i non amministratori
        echo "<script>jQuery(document).ready(function()    
            {jQuery('#url').parents('tr').remove();});</script>";
    }
}

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
2 set 2013 20:30:04
Commenti

Non riesco a vedere in cosa il codice che hai postato differisca da quello di @birgire.

gmazzap gmazzap
2 set 2013 21:24:04
0

Espandendo la risposta di @birgire, ho scritto questo in un array per renderlo un po' più leggibile:

function awb_remove_user_profile_fields_with_css() {
//Nasconde i campi indesiderati nel profilo utente
$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'

    ];

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

    //Campi che non seguono la convenzione di denominazione del wrapper
    echo '<style>tr.user-profile-picture{ display: none; }</style>';

    //Tutti i sottotitoli
    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' );
28 gen 2018 05:27:27