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.