วิธีลบฟิลด์เหล่านี้ออกจากส่วน 'โปรไฟล์'


16

ฉันต้องลบฟิลด์โปรไฟล์ออกจากหน้า 'โปรไฟล์' ตามบทบาทของผู้ใช้ remove_action("admin_color_scheme_picker", "admin_color_scheme_picker")สำหรับการลบตัวเลือกสีที่ผมใช้ ฉันต้องการลบฟิลด์เหล่านี้:

  1. ชื่อเล่น
  2. แสดงชื่อต่อสาธารณะในชื่อ
  3. AIM, Yahoo, Google talk และฟิลด์เกี่ยวกับตัวคุณ
  4. ส่วน 'แสดงแถบผู้ดูแลระบบ' พร้อมกับช่องทำเครื่องหมาย 2 ช่อง

ฉันผ่านไฟล์ 'user-edit.php' เพื่อดูว่ามีการกระทำ / ตัวกรองใด ๆ ที่อนุญาตให้ฉันทำเช่นนั้น แต่ดูเหมือนว่าไม่มี ใครช่วยบอกฉันถึงวิธีการทำเช่นนี้? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม ขอบคุณ

แก้ไข: ขอบคุณ @helenhousandi สำหรับคำตอบ ฉันทำแบบนี้มาแล้ว

<?php
add_action('admin_footer-profile.php', 'remove_profile_fields');
function remove_profile_fields()
{
    if(current_user_can('custom_role'))
    { ?>
        <script type="text/javascript">
            jQuery("h3:contains('Personal Options')").next('.form-table').remove();
            jQuery("h3:contains('Personal Options')").remove();
            jQuery("h3:contains('About Yourself')").next('.form-table').remove();
            jQuery("h3:contains('About Yourself')").remove();
        </script>
<?php }
}
?>

ฉันรู้ว่ามันใช้เวลานานกว่านี้ แต่มันใช้งานได้! ฉันคิดว่าฉันจะไปกับคำตอบของ @ helenhousandi


จะไปที่ไหนดี functions.php?
เฟเบียน

ใช่. มันสามารถไปที่functions.phpหรือไฟล์ปลั๊กอิน ตราบใดที่ตะขอถูกต้องมันจะทำงานจากที่ใดที่หนึ่ง
Rutwick Gangurde

ตกลง แต่ถ้าฉันใส่ไว้ใน function.php ฉันจะคืนค่าจาวาสคริปต์ได้อย่างไร ด้วยผลตอบแทนหรือเสียงสะท้อน?
เฟเบียน

ดูเหมือนว่าตั้งแต่ WordPress v4.4.1 ชื่อเล่นได้กลายเป็นฟิลด์บังคับและให้ข้อผิดพลาด: โปรดป้อนชื่อเล่นเมื่ออัปเดตผู้ใช้ด้วยการซ่อนนี้ แต่ไม่ได้บรรจุดังนั้นคุณไม่สามารถซ่อนมันได้อีกต่อไป
icc97

คำตอบ:


15

สำหรับตัวกรองวิธีการติดต่อuser_contactmethods::

function update_contact_methods( $contactmethods ) {

    unset( $contactmethods['aim'] );
    unset( $contactmethods['jabber'] );
    unset( $contactmethods['yim'] );

    return $contactmethods;

}
add_filter( 'user_contactmethods', 'update_contact_methods' );

ขอบคุณ ... ได้รับอันนี้! มีอะไรสำหรับส่วน 'แสดงบาร์ผู้ดูแลระบบ' และ 'เกี่ยวกับตัวคุณเอง'?
Rutwick Gangurde

โปรดอัปเดตสิ่งนี้หากคุณพบทางออก ... ฉันยอมรับคำตอบของคุณ ขอบคุณ!
Rutwick Gangurde

+1 เพราะเท่าที่ฉันจำได้ว่าการลบฟิลด์ผ่านทาง PHP ยังหยุด WordPress ไม่ให้สร้างรายการว่างในตาราง usermeta
Ashfame

9

แม้ว่าuser_contactmethodsตัวกรองจะเป็นหนึ่งในไม่กี่หน้าจอสำหรับโปรไฟล์ผู้ใช้เนื่องจากฟิลด์อื่นไม่จำเป็นต้องใช้ใน WordPress คุณสามารถใช้ jQuery .hide()และ.remove()กำจัดสิ่งที่คุณไม่ต้องการได้อย่างมีประสิทธิภาพโดยไม่ต้องยุ่งยากในแง่ของการบันทึกข้อมูล . แน่นอนว่าคนที่ไม่มี JS บนจะยังคงเห็นพวกเขา แต่นั่นเป็นเพียงส่วนน้อยและฉันเดาว่าการเปลี่ยนแปลงข้อมูลที่นั่นจะไม่ส่งผลกระทบอะไรเลย

ตัวอย่างของการลบตัวเลือกส่วนบุคคลทั้งหมด (แสดงแถบผู้ดูแลระบบและชุดรูปแบบสี) ฉันรู้ว่าไม่ใช่สิ่งที่คุณกำลังมองหา แต่ต้องการให้ตัวอย่างที่รวดเร็วแก่คุณ:

// remove personal options block
if( is_admin() ){
    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );
    add_action( 'personal_options', 'prefix_hide_personal_options' );
}

function prefix_hide_personal_options() {
  ?>
    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
            $( '#your-profile .form-table:first, #your-profile h3:first' ).remove();
        } );
    </script>
  <?php
}

นอกจากนี้ข้อความเกี่ยวกับตัวเลือกแสดงแถบผู้ดูแลระบบ: ใน 3.3 แถบผู้ดูแลระบบกำลังกลายเป็นส่วนหัวและไม่สามารถเปิดหรือปิดดังนั้นจึงอาจไม่น่าเป็นห่วง

ฉันอัปเดตตัวอย่างโค้ดเพื่อให้แม่นยำและสมบูรณ์ยิ่งขึ้น มีของเหลืออยู่ในนั้น


ขอบคุณ! นี่เป็นทางออกที่ดี! สิ่งที่ผมทำก็คือสิ่งที่คล้ายกัน profile.phpแต่ผมใช้เบ็ดการกระทำที่แตกต่างกันเพื่อให้สคริปต์ของฉันทำงานเฉพาะใน ฉันต้องทำเช่นนี้สำหรับบทบาทที่กำหนดเองเฉพาะที่กำหนดไว้ในระบบของฉัน อัปเดตคำถามของฉันด้วยคำตอบ
Rutwick Gangurde

1
หากคุณเพิ่มสิ่งต่อไปนี้ใน jQuery มันจะซ่อนชื่อเล่นและ 'ชื่อที่แสดงเป็น' จากคำถาม:$("#nickname,#display_name").parent().parent().remove();
icc97

คุณยังสามารถใช้ edit_user_profile hook และไม่ใช้วิธี jQuery (เอกสาร). ready เพื่อเรียกใช้โค้ดทันที เช่นนี้
Giraldi

ต้องใช้ชื่อเล่นตอนนี้ตั้งแต่ WP v.4.4.1
icc97

2

เนื่องจากดูเหมือนว่าจะไม่มี php hook ที่ดีสำหรับสิ่งนี้ฉันสิ้นสุดการซ่อนฟิลด์ด้วย CSS จากนั้นลบออกด้วย JS

add_action( 'admin_head', 'remove_default_profile_fields' );

function remove_default_profile_fields() {

    global $pagenow;

    if( 'profile.php' != $pagenow) return;

    remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' );

    // <tr> selectors, each containing a field
    $tr = array(
        "tr.user-rich-editing-wrap",
        "tr.user-comment-shortcuts-wrap",
        "tr.user-first-name-wrap",
        "tr.user-last-name-wrap",
        "tr.user-admin-bar-front-wrap",
        "tr.user-profile-picture",
        "tr.user-user-login-wrap",
        "tr.user-display-name-wrap",
        "h2" // Personally I decided to remove all H2 tags too.
    );

    $selectors = implode(", ", $tr);

    // Hide the fields with css, so even if javascript is disabled they wont show up. 
    echo "<style>{$selectors}{display:none;}</style>"; ?>

    <script type="text/javascript">
        jQuery( document ).ready(function( $ ){
           // Remove selected <tr>'s
           $( '<?= $selectors; ?>' ).remove();
           // Remove any empty table that may have been left over
           $(".form-table:not(:has(tr))").remove();
        });
    </script>

  <?php
}

1

จากฟอรัมสนับสนุน wordpressคุณสามารถทำการลบโดยใช้ PHP สิ่งนี้จะลบส่วนเกี่ยวกับตัวคุณเอง:

if (! function_exists('remove_plain_bio') ){
    function remove_plain_bio($buffer) {
        $titles = array('#<h3>About Yourself</h3>#','#<h3>About the user</h3>#');
        $buffer=preg_replace($titles,'<h3>Password</h3>',$buffer,1);
        $biotable='#<h3>Password</h3>.+?<table.+?/tr>#s';
        $buffer=preg_replace($biotable,'<h3>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');

รหัสจะแทนที่ส่วนหัว 'เกี่ยวกับตัวคุณเอง' ด้วย 'รหัสผ่าน' จากนั้นตัดสิ่งใด ๆ ระหว่างที่และตารางถัดไปที่พบ (ซึ่งคือตารางรหัสผ่าน)

นอกจากนี้ปลั๊กอินWP Hide Dashboardจะทำหน้าที่คล้ายกันในการเปลี่ยน jQuery หากคุณต้องการขยาย


สำหรับการอ้างอิงในอนาคตคุณอาจต้องการใช้admin_head-profile.phpและadmin_footer-profile.phpแทน

1

ระวัง!!

1) การลบฟิลด์อาจไม่ดีเช่นเดียวกับการอัปเดตหากคุณไม่ส่งฟิลด์ที่จำเป็นไปยังฮุคอัปอัพเดต WORDPRESS มันอาจตั้งค่าว่างในฟิลด์เหล่านั้น! (ตัวอย่างเช่นในแบบฟอร์มการส่งควรมีอยู่เช่นกัน<input name="username".../>)
ฉันคิดว่าดีกว่าการซ่อนจากผู้ใช้ที่มองเห็นด้วย jquery .hide();และไม่ใช้.remove();
รหัสตัวอย่างเพื่อซ่อนฟิลด์" DISPLAY NAME " และ " NICKNAME ":

jQuery(document).ready(function( $ ){
    $("#nickname,#display_name").parent().parent().hide();
});

2) เพื่อให้ผู้ดูแลระบบบาร์ซ่อนมีตัวเลือกในเมนูพิเศษ WordPress (ในการตั้งค่า) สำหรับรหัสที่กำหนดเองเช่น

add_action('after_setup_theme', 'remove_admin_bar');

function remove_admin_bar()
{
  if (!current_user_can('administrator') && !is_admin()) 
  {
    show_admin_bar(false);
  }
}

0

ใช้

add_action('admin_head', 'remove_profile_fields');

และเพิ่ม

jQuery(document).ready(function(e) {

ก่อนจาวาสคริปต์


คำอธิบายเล็ก ๆ น้อย ๆ จะดีมาก!
bravokeyl

-4

ไม่มีตัวกรองสำหรับปิดใช้งาน ดู source ( /wp-admin/user-edit.php) เมื่อคุณต้องการทำสิ่งนี้ คุณสามารถซ่อนพวกเขาด้วย JS แต่พวกเขายังคงสามารถมองเห็นได้และมีการปรับปรุงค่าใน POST

ตัวเลือกที่ทำงานได้เท่านั้นคือการแฮ็คแกนเอง เพียงตรวจสอบให้แน่ใจว่าคุณจัดการการอัปเดตและไม่สนใจช่องเหล่านี้ใน POST


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

3
หากทางออกเดียวที่คุณนึกถึงคือแฮ็คคอร์บางทีคุณอาจไม่ควรตอบคำถามนั้น คุณไม่จำเป็นต้องแนะนำให้ผู้ถามคำถามเพื่อดูไฟล์ที่กล่าวถึงแล้วและคุณไม่ถูกต้องในการระบุว่าไม่มีตัวกรองเลย - แน่นอนคุณต้องอ่านคำถามและคำตอบก่อนหน้านี้ก่อน?
helenhousandi

@helenhousandi xoxo
EarnestoDev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.