web-dev-qa-db-fra.com

Suppression du champ "Site Web" des informations de contact

Je souhaite supprimer le champ du site Web des informations de contact de l'utilisateur. J'utilise ce qui suit pour supprimer AIM, Jabber et Yahoo IM. Mais je ne peux pas utiliser cela pour supprimer le site Web. Quelqu'un s'il vous plaît aider.

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

Réponse revisitée et mise à jour:

Nous ne pouvons pas utiliser le filtre user_contactmethods pour supprimer l'encapsuleur de site Web, car cette partie est codée en dur dans le fichier user-edit.php et ne fait pas partie de la boucle filtrable contacts utilisateur, générée par:

wp_get_user_contact_methods( $profileuser )

Le cacher avec CSS

L'élément de rangée website possède maintenant sa propre classe .user-url-wrap:

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

Auparavant, nous devions utiliser jQuery pour supprimer la ligne parent du champ #url.

Mais maintenant, nous pouvons facilement cibler le wrapper site web et le cacher avec 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' );

Cacher d'autres champs

Il existe des classes de lignes similaires:

tr.user-{field}-wrap

disponible pour les champs:

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

y compris tous les champs des méthodes dynamiques contacts de l'utilisateur.

Ici, nous venons de remplacer la partie {field} par le nom de champ correspondant.

Captures d'écran

Avant de supprimer la rangée du site Web:  Before


Après avoir supprimé la rangée du site Web:  After

11
birgire

J'ai résolu le problème avec ob_ functions et DOMDocument. C'est mieux que jQuery ou CSS pour protéger le formulaire.

J'utilise ce type de solution chaque fois que je ne peux pas accéder à une partie du contenu HTML via un point d'ancrage.

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();
}
3
Jérome Obbiet

Développer sur @ birgire et justifier la réponse de @Patricia Walton, si vous ajoutez seulement

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

il sera seulement parti de la page où admin est en train de modifier un profil. Pour le faire également disparaître lorsqu'un utilisateur modifie son propre profil, ajoutez également

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, comme ceci:

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
afrendeiro

En développant la réponse de @ birgire, j'ai écrit ceci dans un tableau pour qu'il soit un peu plus facile à lire:

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

Le code ne fonctionnait pas pour moi non plus, mais le fait de changer add_action pour qu'il pointe vers profile.php fonctionnait.

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');
0
Patricia Walton