web-dev-qa-db-fra.com

Comment supprimer ces champs de la section "Profil"?

Je dois supprimer certains champs de profil de la page "Profil" en fonction des rôles de l'utilisateur. Pour enlever le sélecteur de couleur, j'ai utilisé remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Je veux supprimer ces champs:

  1. Surnom
  2. Afficher le nom publiquement en tant que
  3. Champs AIM, Yahoo, Google Talk et À propos de vous-même
  4. La section 'Show Admin Bar' avec les 2 cases à cocher

J'ai consulté le fichier 'user-edit.php' pour voir s'il existe des actions/filtres qui me permettent de le faire, mais il semble que ce ne soit pas le cas. Quelqu'un peut-il me dire comment faire cela? Toute aide serait appréciée. Merci

EDIT: Merci @helenhousandi pour la réponse. Je l'avais déjà fait de cette façon cependant.

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

Je sais que c'est un peu plus long, mais ça a fonctionné! Je pense que je vais aller avec la réponse de @ helenhousandi.

15
Rutwick Gangurde

Pour le filtre des méthodes de contact: user_contactmethods :

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['Jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );
14
Chris_O

Bien que le filtre user_contactmethods soit l’un des rares pour l’écran du profil de l’utilisateur, les autres champs ne sont pas obligatoires dans WordPress. Vous pouvez donc utiliser les fonctions .hide() et .remove() de jQuery pour supprimer efficacement celles dont vous ne voulez pas complications en termes de sauvegarde de l'information. Bien sûr, une personne sans JS le verrait toujours, mais c'est une petite minorité et je suppose que les informations qui changent là-bas n'affecteront en réalité rien.

Un exemple de suppression de la totalité des options personnelles (affichez la barre d'administration et le jeu de couleurs). Je sais que ce n'est pas ce que vous cherchez exactement, je voulais juste vous donner un exemple rapide que j'ai sous la main:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

En outre, une note sur l’option Afficher la barre d’administration: dans la version 3.3, la barre d’administration devient l’en-tête et ne peut donc pas être activée ou désactivée; il est donc peut-être inutile de s’inquiéter.

J'ai mis à jour l'exemple de code pour qu'il soit plus précis et complet. Il y avait des restes dedans.

9
helenhousandi

Comme il ne semble pas y avoir de bon hook php pour cela, j'ai fini par cacher les champs avec CSS, puis les supprimer avec JS.

add_action( 'admin_head', 'remove_default_profile_fields' );

function remove_default_profile_fields() {

    global $pagenow;

    if( 'profile.php' != $pagenow) return;

    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>'s
           $( '<?= $selectors; ?>' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}
1
Tobbe

Depuis le forum de support wordpress , vous pouvez le supprimer en utilisant PHP. Cela supprime la section À propos de vous-même:

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>Password</h3> <table class="form-table">',$buffer,1);
        return $buffer;
    }

    function profile_admin_buffer_start() { ob_start("remove_plain_bio"); }

    function profile_admin_buffer_end() { ob_end_flush(); }
}
add_action('admin_head', 'profile_admin_buffer_start');
add_action('admin_footer', 'profile_admin_buffer_end');

Le code remplace l'en-tête "About Yourself" par "Password", puis supprime tout ce qui se trouve entre celui-ci et la table suivante trouvée (la table de mots de passe).

De plus, le plugin WP Masquer le tableau de bord effectue un remplacement similaire de jQuery si vous souhaitez étendre cela.

1
icc97

FAITES ATTENTION!!

1) Supprimer un champ peut ne pas être bon , comme lors de la mise à jour, si vous n'envoyez pas les champs essentiels au crochet de mise à jour de WORDPRESS, vous risquez de définir des valeurs vides pour ces champs! (par exemple, dans le formulaire de soumission, il devrait exister: <input name="username".../>)
Je pense qu'il est préférable de CACHER aux utilisateurs uniquement visuellement, avec jquery .hide(); et non avec .remove();
EXEMPLE de code pour masquer les champs " DISPLAY NAME " et "PSEUDO":

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2) Pour masquer la barre d’administration, il existe une option spéciale dans le menu wordpress (dans Paramètres) . pour le code personnalisé, comme i.e.

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
1
T.Todua

Utilisation

add_action('admin_head', 'remove_profile_fields');

et ajouter

jQuery(document).ready(function(e) {

avant JavaScript.

0
Akhil Sharma