Come rimuovere la biografia dalla pagina di amministrazione del profilo utente

13 gen 2012, 16:09:34
Visualizzazioni: 16.2K
Voti: 18

Vorrei rimuovere o nascondere il campo di inserimento della biografia dalla pagina del profilo. Come si fa? Ho già rimosso alcuni metodi di contatto da questa pagina, ma non sono sicuro di come eliminare la biografia.

0
Tutte le risposte alla domanda 5
5
22

Non esiste un hook dedicato – la gestione degli utenti è una priorità bassa in WordPress. Devi usare l'output buffering (sì, non è elegante).

Ecco una semplice dimostrazione di come potrebbe essere fatto:

add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );

/**
 * Cattura la parte con la biobox in un output buffer e la rimuove.
 */
class T5_Hide_Profile_Bio_Box
{
    /**
     * Chiamato su 'personal_options'.
     *
     * @return void
     */
    public static function start()
    {
        $action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
        add_action( $action, array ( __CLASS__, 'stop' ) );
        ob_start();
    }

    /**
     * Rimuove la bio box dal contenuto bufferizzato.
     *
     * @return void
     */
    public static function stop()
    {
        $html = ob_get_contents();
        ob_end_clean();

        // rimuove il titolo
        $headline = __( IS_PROFILE_PAGE ? 'Su di te' : 'Informazioni utente' );
        $html = str_replace( '<h2>' . $headline . '</h2>', '', $html );

        // rimuove la riga della tabella
        $html = preg_replace( '~<tr>\s*<th><label for="description".*</tr>~imsUu', '', $html );
        print $html;
    }
}

Puoi scaricare il codice come plugin standalone: Plugin Remove Bio Box.

I campi della password ora sono sotto Informazioni di contatto … se non ti piace, aggiungi un titolo in stop() – e ricordati dell'I18n. ;)

14 gen 2012 06:58:11
Commenti

Questo è molto utile per me, e proprio quello che stavo cercando. Grazie!

Marc Marc
16 gen 2012 10:45:53

Ottimo. Non conoscevo la costante IS_PROFILE_PAGE :)

Anh Tran Anh Tran
19 gen 2012 11:31:08

Questo non funziona con la versione 4.6.1

realtebo realtebo
15 nov 2016 16:09:22

@realtebo Sì, il <h3> ora è un <h2>. Ho corretto il codice.

fuxia fuxia
16 nov 2016 00:17:53

Sembra un modo piuttosto pesante di affrontare il problema dato che aggiunge un impatto sulle prestazioni. La mia soluzione basata su css qui sotto è molto più semplice ed efficace senza alcun impatto significativo sulle prestazioni.

Phill Healey Phill Healey
27 apr 2021 14:12:02
0

La soluzione più semplice e leggera è utilizzare il CSS per nasconderlo dalla vista.

.user-description-wrap {
   display: none;
}
1 nov 2018 00:36:30
3

Dopo la recente modifica della classe, questo funziona:

add_action( 'personal_options', array ( 'T5_Hide_Profile_Bio_Box', 'start' ) );

/**
 * Cattura la parte con la biobox in un buffer di output e la rimuove.
 *
 * @author Thomas Scholz, <info@toscho.de>
 *
 */
class T5_Hide_Profile_Bio_Box
{
    /**
     * Chiamato su 'personal_options'.
     *
     * @return void
     */
    public static function start()
    {
        $action = ( IS_PROFILE_PAGE ? 'show' : 'edit' ) . '_user_profile';
        add_action( $action, array ( __CLASS__, 'stop' ) );
        ob_start();
    }

    /**
     * Rimuove la bio box dal contenuto bufferizzato.
     *
     * @return void
     */
    public static function stop()
    {
        $html = ob_get_contents();
        ob_end_clean();

        // rimuove l'intestazione
        $headline = __( IS_PROFILE_PAGE ? 'Informazioni personali' : 'Informazioni utente' );
        $html = str_replace( '<h3>' . $headline . '</h3>', '', $html );

        // rimuove la riga della tabella
        $html = preg_replace( '~<tr class="user-description-wrap">\s*<th><label for="description".*</tr>~imsUu', '', $html );
        print $html;
    }
}
13 mag 2015 19:21:19
Commenti

Suggerisco semplicemente di cambiare questo $headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' ) in questo $headline = ( IS_PROFILE_PAGE ? __('About Yourself') : __('About the user' ));

realtebo realtebo
15 nov 2016 16:13:49

Inoltre: il titolo è ora all'interno di un tag <h2>

realtebo realtebo
15 nov 2016 16:15:21

Sembra un approccio troppo pesante per gestire questa situazione, in quanto aggiunge un impatto sulle prestazioni. La mia soluzione basata su CSS qui sotto è molto più semplice ed efficace senza alcun impatto significativo sulle prestazioni

Phill Healey Phill Healey
27 apr 2021 14:12:14
2

Basandosi sulle risposte precedenti, ecco cosa sto usando per rimuovere le parti della pagina Utente che non voglio:

$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) {
            // Opzioni Personali
            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');

            // Informazioni / 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;
    }
}

È ancora dipendente dalla struttura dell'HTML, ma funziona per me.

2 feb 2017 05:40:54
Commenti

Come posso rimuovere il sito web da user-new.php? Ho aggiunto la pagina a $pagesToAffect e rimosso website come riga, ma è ancora presente.

Jason Jason
24 set 2017 12:55:34

Questo sembra un modo molto pesante per affrontare il problema in quanto aggiunge un impatto sulle prestazioni. La mia soluzione basata su CSS è molto più semplice ed efficace senza alcun impatto significativo sulle prestazioni

Phill Healey Phill Healey
27 apr 2021 14:12:29
1

Se aggiungi il seguente codice al tuo file functions.php, rimuoverà la sezione biografia per tutte le lingue di un sito multi-lingua:

//rimuove la biografia
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');
31 mag 2013 12:52:20
Commenti

Questo sembra un modo molto pesante per affrontare il problema, poiché aggiunge un impatto sulle prestazioni. La mia soluzione basata su CSS è molto più semplice ed efficace, senza alcun impatto significativo sulle prestazioni

Phill Healey Phill Healey
27 apr 2021 14:12:35