Cum să elimini secțiunea Biografie din pagina de administrare a profilului utilizatorului
Aș dori să elimin sau să ascund câmpul Biografie din pagina de profil. Cum se poate face acest lucru? Am eliminat deja unele metode de contact din această pagină, dar nu sunt sigur cum să scap de biografie.

Nu există un hook dedicat – gestionarea utilizatorilor este o prioritate scăzută în WordPress. Trebuie să folosești bufferizarea ieșirii (da, nu este ideal).
Iată o demonstrație simplă despre cum poate fi realizat acest lucru:
add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );
/**
* Capturează secțiunea cu biobox-ul într-un buffer de ieșire și o elimină.
*/
class T5_Hide_Profile_Bio_Box
{
/**
* Apelat la 'personal_options'.
*
* @return void
*/
public static function start()
{
$action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
add_action( $action, array ( __CLASS__, 'stop' ) );
ob_start();
}
/**
* Elimină caseta bio din conținutul bufferizat.
*
* @return void
*/
public static function stop()
{
$html = ob_get_contents();
ob_end_clean();
// elimină titlul
$headline = __( IS_PROFILE_PAGE ? 'Despre tine' : 'Despre utilizator' );
$html = str_replace( '<h2>' . $headline . '</h2>', '', $html );
// elimină rândul din tabel
$html = preg_replace( '~<tr>\s*<th><label for="description".*</tr>~imsUu', '', $html );
print $html;
}
}
Poți descărca codul ca un plugin independent: Plugin Remove Bio Box.
Câmpurile pentru parolă se află acum sub Informații de contact … dacă nu-ți place acest lucru, poți adăuga un titlu în stop()
– și nu uita de I18n. ;)

Acest lucru este foarte util pentru mine și exact ceea ce căutam. Mulțumesc!

De la ultima modificare a clasei, această soluție funcționează:
add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );
/**
* Capturează secțiunea cu biografia într-un buffer de ieșire și o elimină.
*
* @author Thomas Scholz, <info@toscho.de>
*
*/
class T5_Hide_Profile_Bio_Box
{
/**
* Apelat la acțiunea 'personal_options'.
*
* @return void
*/
public static function start()
{
$action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
add_action( $action, array ( __CLASS__, 'stop' ) );
ob_start();
}
/**
* Elimină caseta de biografie din conținutul bufferizat.
*
* @return void
*/
public static function stop()
{
$html = ob_get_contents();
ob_end_clean();
// elimină titlul
$headline = __( IS_PROFILE_PAGE ? 'Despre tine' : 'Despre utilizator' );
$html = str_replace( '<h3>' . $headline . '</h3>', '', $html );
// elimină rândul din tabel
$html = preg_replace( '~<tr class="user-description-wrap">\s*<th><label for="description".*</tr>~imsUu', '', $html );
print $html;
}
}

Eu doar sugerez să schimbăm asta $headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' )
în asta $headline = ( IS_PROFILE_PAGE ? __('About Yourself') : __('About the user' ));

Bazându-mă pe răspunsurile anterioare, iată ce folosesc pentru a elimina părțile din pagina Utilizator pe care nu le doresc:
$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) {
// Opțiuni Personale
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');
// Despre / 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;
}
}
Încă se bazează pe structura HTML, dar funcționează pentru mine.

Cum pot elimina câmpul website din user-new.php? Am adăugat pagina în $pagesToAffect și am eliminat website ca rând, dar încă apare.

Dacă adaugi codul de mai jos în fișierul functions.php, acesta va elimina secțiunea de biografie pentru toate limbile dintr-un site multi-lingvistic:
//elimină biografia
function remove_plain_bio($buffer) {
$titles = array('#<h3>'._x('Despre tine', 'bio section title').'</h3>#','#<h3>'._x('Despre utilizator', 'bio section title').'</h3>#');
$buffer=preg_replace($titles,'<h3>'._x('Parolă', 'password section title').'</h3>',$buffer,1);
$biotable='#<h3>'._x('Parolă', 'password section title').'</h3>.+?<table.+?/tr>#s';
$buffer=preg_replace($biotable,'<h3>'._x('Parolă', 'password section title').'</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');
