Comment supprimer ces champs de la section "Profil"?

14

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

  1. Pseudo
  2. Afficher le nom publiquement sous la forme
  3. Champs AIM, Yahoo, Google Talk et À propos de vous
  4. La section "Afficher la barre d'administration" 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

MODIFIER: 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.

    
posée Rutwick Gangurde 03.11.2011 - 11:36

7 réponses

14

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' );
    
réponse donnée Chris_O 03.11.2011 - 12:08
9

Bien que le filtre user_contactmethods soit l’un des rares pour l’écran de profil d’utilisateur, car Les autres champs ne sont pas obligatoires dans WordPress. Vous pouvez utiliser les outils .hide() et .remove() de jQuery pour supprimer efficacement ceux que vous ne voulez pas sans complication en termes de sauvegarde des informations. Bien sûr, une personne sans JS le verrait toujours, mais c'est une petite minorité et je suppose que les informations qui y sont modifiées 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 exactement ce que vous recherchez, 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 remarque à propos de l'option Afficher la barre d'administration: en 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 vous en soucier.

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

    
réponse donnée helenhousandi 03.11.2011 - 15:36
1

Extrait du forum de support wordpress vous pouvez faire la suppression 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 "À propos de vous" par "Mot de passe", puis supprime tout ce qui se trouve entre celui-ci et le prochain tableau trouvé (le tableau des mots de passe).

De même, le plug-in WP Hide Dashboard effectue un remplacement similaire par jQuery si vous souhaitez étendre cela.

    
réponse donnée icc97 01.02.2012 - 08:53
1

SOYEZ PRUDENT!

1) La suppression d'un champ peut ne pas être une bonne chose , 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 vaut mieux CACHER aux utilisateurs uniquement visuellement, avec jquery .hide(); et non avec .remove();
Code EXEMPLE pour masquer les champs " NOM D'AFFICHAGE " et " NICKNAME ":

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 un code personnalisé, comme par exemple

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}
    
réponse donnée T.Todua 23.09.2014 - 09:35
1

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
}
    
réponse donnée Tobbe 10.09.2017 - 18:28
0

Utiliser

add_action('admin_head', 'remove_profile_fields');

et ajoutez

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

avant JavaScript.

    
réponse donnée Akhil Sharma 22.09.2016 - 07:04
-4

Il n'y a pas de filtre pour les désactiver. Regardez la source ( /wp-admin/user-edit.php ) lorsque vous devez effectuer des tâches de ce type. Vous pouvez les masquer avec JS, mais vous pouvez toujours les rendre visibles et les valeurs sont mises à jour lors du POST.

La seule option viable est de pirater le noyau vous-même. Assurez-vous simplement que vous gérez la mise à jour et ignorez ces champs lors du POST.

    
réponse donnée EarnestoDev 03.11.2011 - 13:23

Lire d'autres questions sur les étiquettes