Respuestas:
No hay un enlace dedicado: la gestión de usuarios es de baja prioridad en WordPress. Tienes que usar el buffer de salida (sí, no es agradable).
Aquí hay una demostración simple de cómo se podría hacer esto:
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, <info@toscho.de>
*
*/
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;
}
}
Puede descargar el código como un complemento independiente: Complemento Eliminar Bio Box .
Los campos de contraseña ahora están en Información de contacto ... si no le gusta, agregue un título stop()
y cuide I18n. ;)
IS_PROFILE_PAGE
constante :)
<h3>
es un <h2>
ahora. He arreglado el código.
Desde el cambio de clase reciente esto funciona:
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, <info@toscho.de>
*
*/
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;
}
}
$headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' )
en esto$headline = ( IS_PROFILE_PAGE ? __('About Yourself') : __('About the user' ));
<h2>
etiqueta
Sobre la base de las respuestas anteriores, esto es lo que estoy usando para eliminar las partes de la página Usuario que no quiero:
$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;
}
}
Todavía depende de la estructura del HTML, pero funciona para mí.
La solución más simple y liviana es usar CSS para ocultarlo de la vista.
.user-description-wrap {
display: none;
}
Si agrega el siguiente código a su archivo functions.php, eliminará la sección de biografía para todos los idiomas de un sitio multilingüe:
//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');