วิธีลบประวัติจากหน้าผู้ดูแลระบบโปรไฟล์ผู้ใช้


14

ฉันต้องการลบหรือซ่อนฟิลด์ป้อนข้อมูลชีวประวัติจากหน้าโปรไฟล์ คุณจะทำสิ่งนี้ได้อย่างไร ฉันได้ลบวิธีการติดต่อบางส่วนจากหน้านี้แล้ว แต่ฉันไม่แน่ใจว่าจะกำจัดชีวประวัติได้อย่างไร

คำตอบ:


21

ไม่มีเบ็ดเฉพาะการจัดการผู้ใช้มีความสำคัญต่ำใน WordPress คุณต้องใช้บัฟเฟอร์ผลลัพธ์ (ใช่ไม่ดี)

นี่คือตัวอย่างง่ายๆที่สามารถทำได้:

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

คุณสามารถดาวน์โหลดรหัสเป็นปลั๊กอินโลน: ปลั๊กอินลบ Bio กล่อง

ก่อน

ป้อนคำอธิบายรูปภาพที่นี่

หลังจาก

ป้อนคำอธิบายรูปภาพที่นี่

ขณะนี้ฟิลด์รหัสผ่านอยู่ภายใต้ข้อมูลติดต่อ …หากคุณไม่ชอบให้เพิ่มหัวเรื่องในstop()- และดูแล I18n ;)


มันมีประโยชน์มากสำหรับฉันและสิ่งที่ฉันเป็นหลังจากนั้น ขอขอบคุณ!
Marc

1
ดี ยังไม่ได้เป็นที่รู้จักกันเกี่ยวกับการIS_PROFILE_PAGEคง :)
Anh Tran

สิ่งนี้ใช้ไม่ได้กับ 4.6.1
realtebo

@realtebo ใช่<h3>เป็น<h2>ตอนนี้ ฉันแก้ไขรหัสแล้ว
fuxia

7

ตั้งแต่ชั้นเรียนล่าสุดเปลี่ยนงานนี้:

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

1
ฉันแค่แนะนำให้เปลี่ยนสิ่งนี้$headline = __( IS_PROFILE_PAGE ? 'About Yourself' : 'About the user' )เป็นจริง$headline = ( IS_PROFILE_PAGE ? __('About Yourself') : __('About the user' ));
realtebo

นอกจากนี้: พาดหัวตอนนี้อยู่ใน<h2>แท็ก
realtebo

2

จากคำตอบก่อนหน้านี่คือสิ่งที่ฉันใช้เพื่อลบส่วนต่างๆของหน้าผู้ใช้ที่ฉันไม่ต้องการ:

$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;
    }
}

มันยังคงพึ่งพาโครงสร้างของ HTML แต่ใช้งานได้สำหรับฉัน


ฉันจะลบเว็บไซต์ออกจาก user-new.php ได้อย่างไร ฉันเพิ่มหน้านี้ใน $ pagesToAffect และนำเว็บไซต์ออกเป็นแถว แต่ยังคงอยู่
Jason

2

ทางออกที่ง่ายและเบาที่สุดคือการใช้ CSS เพื่อซ่อนมันจากมุมมอง

.user-description-wrap {
   display: none;
}

0

หากคุณเพิ่มรหัสด้านล่างลงในไฟล์ functions.php ของคุณมันจะลบส่วนไบโอสำหรับทุกภาษาของเว็บไซต์หลายภาษา:

//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');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.