Je viens de passer à WordPress 4.4 et je remarque maintenant la page de profil de mes utilisateurs dans l'admin. Une section intitulée "Profile picture" (profil de l'image) contient un lien vers Gravatar.
Le plugin que je développe limite beaucoup de choses dans profile.php; malheureusement en supprimant du DOM via jQuery:
jQuery( document ).ready(function() {
jQuery( "h2:contains('Personal Options')" ).remove();
jQuery( "h2:contains('Name')" ).remove();
jQuery( "h2:contains('Contact Info')" ).remove();
jQuery( "h2:contains('About Yourself')" ).remove();
jQuery( "h2:contains('Account Management')" ).remove();
jQuery( "tr.show-admin-bar" ).parents("table:first").remove();
jQuery( "tr.user-first-name-wrap" ).remove();
jQuery( "tr.user-last-name-wrap" ).remove();
jQuery( "tr.user-nickname-wrap" ).remove();
jQuery( "tr.user-display-name-wrap" ).remove();
jQuery( "tr.user-url-wrap" ).remove();
jQuery( "tr.user-description-wrap").parents("table:first").remove();
jQuery( ".user-sessions-wrap" ).remove();
});
Avant de continuer sur la dépendance jQuery, existe-t-il une meilleure façon de procéder (en dehors du remplacement de la mémoire tampon de sortie)? En outre, existe-t-il un autre paramètre spécifique à la photo de profil de l'utilisateur ou cette solution jQuery sera-t-elle la solution pour le moment?
Nous pouvons utiliser l'option show_avatars
pour supprimer la section Profile Picture .
Nous pouvons visiter /wp-admin/options.php
pour le désactiver manuellement.
Ou mettez-le à jour avec:
update_option( 'show_avatars', 0 );
Ou modifiez-le à travers un filtre:
add_filter( 'option_show_avatars', '__return_false' );
Nous pourrions également le limiter à la page profile.php
:
add_action( 'load-profile.php', function()
{
add_filter( 'option_show_avatars', '__return_false' );
} );
Supprimer des éléments de DOM ne les supprime pas vraiment. Si tout ce que vous voulez, c'est une meilleure interface graphique, alors cela peut être une technique valable, mais si vous voulez réellement empêcher les gens de jouer avec ces champs (disons pour des raisons de sécurité), cela ne suffit pas.
Un problème plus important avec votre code est peut-être que vous essayez d'identifier du texte, ce qui signifie que le plugin échouera pour les installations non anglaises et parfois même pour les anglais.
Le problème suivant est que d'autres plugins pourraient ajouter leurs propres champs, laissant la page avec un affichage étrange.
Si vous avez besoin d’une page de profil très étroitement contrôlée, vous devez en écrire une et laisser l’utilisateur y accéder uniquement. La page de profil intégrée n'est pas assez souple pour le moment pour ajouter, supprimer ou modifier facilement les autorisations pour ses divers composants (il s'agit d'une instruction générale, certains composants sont plus souples que d'autres).
Certains crochets permettent de supprimer certaines parties de la page de profil. En outre, vous pouvez simplement utiliser php pour mettre en tampon la sortie de la page, puis supprimer le contenu correspondant.
// Remove fields from Admin profile page
if (!function_exists('CCK_remove_profile_options')) {
function CCK_remove_profile_options($subject)
{
$subject = preg_replace('#<h2>' . __("Personal Options") . '</h2>#s', '', $subject, 1); // Remove the "Personal Options" title
$subject = preg_replace('#<tr class="user-syntax-highlighting-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Syntax Highlighting" field
$subject = preg_replace('#<tr class="user-rich-editing-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Visual Editor" field
$subject = preg_replace('#<tr class="user-comment-shortcuts-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Keyboard Shortcuts" field
$subject = preg_replace('#<tr class="show-admin-bar(.*?)</tr>#s', '', $subject, 1); // Remove the "Toolbar" field
//$subject = preg_replace('#<h2>'.__("Name").'</h2>#s', '', $subject, 1); // Remove the "Name" title
//$subject = preg_replace('#<tr class="user-display-name-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Display name publicly as" field
$subject = preg_replace('#<h2>' . __("Contact Info") . '</h2>#s', '<h2>' . __("Login Management") . '</h2>', $subject, 1); // Remove the "Contact Info" title
$subject = preg_replace('#<tr class="user-url-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
$subject = preg_replace('#<tr class="user-googleplus-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Google+" field
$subject = preg_replace('#<tr class="user-Twitter-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
$subject = preg_replace('#<tr class="user-facebook-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Website" field
$subject = preg_replace('#<h2>' . __("Account Management") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
$subject = preg_replace('#<h2>' . __("About Yourself") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
$subject = preg_replace('#<h2>' . __("About the user") . '</h2>#s', '', $subject, 1); // Remove the "About Yourself" title
$subject = preg_replace('#<tr class="user-description-wrap(.*?)</tr>#s', '', $subject, 1); // Remove the "Biographical Info" field
//$subject = preg_replace('#<tr class="user-profile-picture(.*?)</tr>#s', '', $subject, 1); // Remove the "Profile Picture" field
//$subject = preg_replace('#<h3>' . __("User Expiry Information") . '</h3>#s', '', $subject, 1); // Remove the "Expire Users Data" title
return $subject;
}
function CCK_profile_subject_start()
{
//if ( /*!*/ current_user_can('manage_options') ) {
ob_start('CCK_remove_profile_options');
//}
}
function CCK_profile_subject_end()
{
//if ( /*!*/ current_user_can('manage_options') ) {
ob_end_flush();
//}
}
}
add_action('admin_head', 'CCK_profile_subject_start');
add_action('admin_footer', 'CCK_profile_subject_end');
// Removes ability to change Theme color for the users
remove_action('admin_color_scheme_picker', 'admin_color_scheme_picker');
Voici des solutions simples pour cela, ajoutez plus d'identifiants pour cacher plus de champs
<script type="text/javascript">/* <![CDATA[ */
var hideFields = [ "aim", "yim", "Jabber" ];
jQuery.each( jQuery( "form#your-profile tr" ), function() {
var field = jQuery( this ).find( "input,textarea,select" ).attr( "id" );
if ( hideFields.indexOf( field ) != -1 ) {
jQuery( this ).remove();
}
});
/* ]]> */</script>
Ou vous pouvez utiliser Plugin Masquer les champs de profil