Je souhaite supprimer ou masquer le champ de saisie Biography de la page de profil. Comment est-ce que tu fais ça? J'ai déjà supprimé certaines méthodes de contact de cette page, mais je ne sais pas comment me débarrasser de la biographie.
Il n'y a pas de hook dédié - la gestion des utilisateurs est une priorité basse dans WordPress. Vous devez utiliser le tampon de sortie (oui, pas Nice).
Voici une démonstration simple comment cela pourrait être fait:
add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );
/**
* Captures the part with the biobox in an output buffer and removes it.
*
* @author Thomas Scholz, <[email protected]>
*
*/
class T5_Hide_Profile_Bio_Box
{
/**
* Called on 'personal_options'.
*
* @return void
*/
public static function start()
{
$action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
add_action( $action, array ( __CLASS__, 'stop' ) );
ob_start();
}
/**
* Strips the bio box from the buffered content.
*
* @return void
*/
public static function stop()
{
$html = ob_get_contents();
ob_end_clean();
// remove the headline
$headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' );
$html = str_replace( '<h2>' . $headline . '</h2>', '', $html );
// remove the table row
$html = preg_replace( '~<tr>\s*<th><label for="description".*</tr>~imsUu', '', $html );
print $html;
}
}
Vous pouvez télécharger le code en tant que plugin autonome: Plugin Remove Bio Box .
Les champs de mot de passe se trouvent maintenant sous Contact Info … Si vous n’aimez pas cela, ajoutez un titre dans stop()
- et prenez soin de I18n. ;)
Depuis le récent changement de classe, cela fonctionne:
add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );
/**
* Captures the part with the biobox in an output buffer and removes it.
*
* @author Thomas Scholz, <[email protected]>
*
*/
class T5_Hide_Profile_Bio_Box
{
/**
* Called on 'personal_options'.
*
* @return void
*/
public static function start()
{
$action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
add_action( $action, array ( __CLASS__, 'stop' ) );
ob_start();
}
/**
* Strips the bio box from the buffered content.
*
* @return void
*/
public static function stop()
{
$html = ob_get_contents();
ob_end_clean();
// remove the headline
$headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' );
$html = str_replace( '<h3>' . $headline . '</h3>', '', $html );
// remove the table row
$html = preg_replace( '~<tr class="user-description-wrap">\s*<th><label for="description".*</tr>~imsUu', '', $html );
print $html;
}
}
En me basant sur les réponses précédentes, voici ce que j’utilise pour supprimer les parties de la page utilisateur que je ne souhaite pas:
$pagesToAffect = [
'/wp-admin/user-edit.php',
'/wp-admin/profile.php'
];
if (isset($PHP_SELF) && in_array($PHP_SELF, $pagesToAffect)) {
add_action('admin_head', [UserProfileCleaner::class, 'start']);
add_action('admin_footer', [UserProfileCleaner::class, 'finish']);
add_filter('user_contactmethods',[UserProfileCleaner::class, 'hideInstantMessaging'],10000,1);
}
class UserProfileCleaner {
public static function start() {
ob_start(function($buffer) {
// Personal Options
if (!IS_PROFILE_PAGE) {
$startHeading = 'Personal Options';
$pattern = "@<(h[0-9]) ?[^>]*?>".preg_quote(_x($startHeading))."</\\1 ?>@is";
preg_match($pattern, $buffer, $start, PREG_OFFSET_CAPTURE);
$endHeading = 'Name';
$pattern = "@<(h[0-9]) ?[^>]*?>".preg_quote(_x($endHeading))."</\\1 ?>@is";
preg_match($pattern, $buffer, $end, PREG_OFFSET_CAPTURE);
if (isset($start[0][1]) && isset($end[0][1]) && $start[0][1]<$end[0][1]) {
$buffer = substr($buffer, 0, $start[0][1]).substr($buffer,$end[0][1]);
}
}
$buffer = self::removeSectionHeading($buffer, 'Name');
$buffer = self::removeSectionHeading($buffer, 'Contact Info');
$buffer = self::removeSectionHeading($buffer, 'Additional Capabilities');
$buffer = self::removeSectionRow($buffer, 'Capabilities');
$buffer = self::removeSectionHeading($buffer, 'Forums');
// About / Bio
$heading = IS_PROFILE_PAGE ? 'About Yourself' : 'About the user';
$buffer = self::removeStandardSection($buffer, $heading);
// Yoast
$heading = 'Yoast SEO Settings';
$buffer = self::removeStandardSection($buffer, $heading);
$heading = 'Memberships';
$pattern = "@<(h[0-9]) ?[^>]*?>".preg_quote(_x($heading))."</\\1 ?>.*?</p>@is";
$buffer = preg_replace($pattern, "", $buffer, 1);
return $buffer;
});
}
private static function removeStandardSection($buffer, $heading) {
$pattern = "@<(h[0-9]) ?[^>]*?>".preg_quote(_x($heading))."</\\1 ?>.*?</table>@is";
return preg_replace($pattern, "", $buffer, 1);
}
private static function removeSectionHeading($buffer, $heading) {
$pattern = "@<(h[0-9]) ?[^>]*?>".preg_quote(_x($heading))."</\\1 ?>@is";
return preg_replace($pattern, "", $buffer, 1);
}
function removeSectionRow($buffer, $heading) {
$pattern = "@<tr ?[^>]*?>[^<]*?<th ?[^>]*?>[^<]*?".preg_quote(_x($heading))."[^<]*?</th ?[^>]*?>.*?</tr ?>@is";
return preg_replace($pattern, "", $buffer, 1);
}
public static function finish() {
ob_end_flush();
}
public static function hideInstantMessaging( $contactmethods ) {
unset($contactmethods['googleplus']);
unset($contactmethods['Twitter']);
unset($contactmethods['facebook']);
return $contactmethods;
}
}
Il dépend toujours de la structure du code HTML, mais cela fonctionne pour moi.
Si vous ajoutez le code ci-dessous à votre fichier functions.php, cela supprimera la section bio de toutes les langues d'un site multilingue:
//remove the bio
function remove_plain_bio($buffer) {
$titles = array('#<h3>'._x('About Yourself').'</h3>#','#<h3>'._x('About the user').'</h3>#');
$buffer=preg_replace($titles,'<h3>'._x('Password').'</h3>',$buffer,1);
$biotable='#<h3>'._x('Password').'</h3>.+?<table.+?/tr>#s';
$buffer=preg_replace($biotable,'<h3>'._x('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');
La solution la plus simple et la plus légère consiste à utiliser CSS pour le masquer.
.user-description-wrap {
display: none;
}