Làm cách nào để xóa các trường này khỏi phần 'Hồ sơ'?


16

Tôi phải xóa một số trường hồ sơ khỏi trang 'Hồ sơ' theo vai trò của người dùng. Để loại bỏ bộ chọn màu tôi đã sử dụng remove_action("admin_color_scheme_picker", "admin_color_scheme_picker"). Tôi muốn xóa các trường này:

  1. Tên nick
  2. Tên hiển thị công khai như
  3. AIM, Yahoo, Google talk và Giới thiệu về bản thân bạn
  4. Phần 'Hiển thị thanh quản trị' cùng với 2 hộp kiểm

Tôi đã xem qua tệp 'user-edit.php' để xem liệu có bất kỳ hành động / bộ lọc nào cho phép tôi làm như vậy không, nhưng có vẻ như không có. Bất cứ ai có thể cho tôi biết làm thế nào để làm điều này? Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn

EDIT: Cảm ơn @helenhousandi cho câu trả lời. Tôi đã làm theo cách này mặc dù.

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

Tôi biết điều này lâu hơn một chút, nhưng nó đã làm việc! Tôi nghĩ rằng tôi sẽ đi với câu trả lời của @ helenhousandi's.


Cái này nên đi đâu? Hàm.php?
Fabian

Đúng. Nó có thể đi đến functions.phphoặc một tập tin plugin. Miễn là các móc đúng, nó sẽ hoạt động từ một trong hai nơi.
Rutwick Gangurde

Ok, nhưng nếu tôi đặt nó trong hàm.php, làm cách nào để trả lại javascript? với sự trở lại hay tiếng vang?
Fabian

Có vẻ như kể từ WordPress v4.4.1, Nickname đã trở thành trường bắt buộc và cung cấp LRI : Vui lòng nhập Tên hiệu khi cập nhật người dùng với ẩn này nhưng không được điền, vì vậy bạn không thể ẩn nó nữa
icc97

Câu trả lời:


15

Đối với bộ lọc phương thức liên hệ 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' );

Cảm ơn ... có cái này! Bất cứ điều gì cho các phần 'Hiển thị thanh quản trị' và 'Giới thiệu về bản thân'?
Rutwick Gangurde

Vui lòng cập nhật thông tin này nếu bạn tìm thấy giải pháp ... Tôi chấp nhận câu trả lời của bạn. Cảm ơn!
Rutwick Gangurde

+1 vì theo như tôi có thể nhớ lại việc xóa các trường thông qua PHP cũng ngăn WordPress tạo các mục trống trong bảng usermeta.
Ashfame

9

Mặc dù user_contactmethodsbộ lọc là một trong số ít cho màn hình hồ sơ người dùng, vì các trường khác không bắt buộc trong WordPress, bạn có thể sử dụng jQuery .hide().remove()để loại bỏ hiệu quả những cái bạn không muốn mà không gặp rắc rối về việc lưu thông tin . Chắc chắn, một người không có JS vẫn sẽ nhìn thấy họ, nhưng đó là một thiểu số nhỏ và tôi đoán rằng thông tin thay đổi ở đó sẽ không thực sự ảnh hưởng đến bất cứ điều gì.

Một ví dụ về việc loại bỏ toàn bộ phần tùy chọn cá nhân (hiển thị thanh quản trị và bảng màu). Tôi biết đó không phải là thứ bạn đang tìm kiếm chính xác, chỉ muốn cho bạn một ví dụ nhanh mà tôi có trong tay:

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

Ngoài ra, một lưu ý về tùy chọn Show Admin Bar: trong 3.3 thanh quản trị viên đang trở thành tiêu đề và do đó không thể bật hoặc tắt, do đó có thể không đáng lo ngại.

Tôi đã cập nhật ví dụ mã để chính xác và đầy đủ hơn. Có một số thức ăn thừa trong đó.


Cảm ơn! Đây là một giải pháp tốt đẹp! Những gì tôi đã làm là một cái gì đó tương tự nhưng tôi đã sử dụng một hook hành động khác để kịch bản của tôi chỉ chạy profile.php. Tôi cũng cần phải làm điều này cho một vai trò tùy chỉnh cụ thể được xác định trong hệ thống của tôi. Cập nhật câu hỏi của tôi với câu trả lời.
Rutwick Gangurde

1
Nếu bạn thêm phần sau vào jQuery, nó cũng sẽ ẩn Tên hiệu và 'Tên hiển thị là' khỏi câu hỏi:$("#nickname,#display_name").parent().parent().remove();
icc97

Bạn cũng có thể sử dụng hook edit_user_profile. Và không sử dụng phương thức jQuery (document). Yet để chạy mã ngay lập tức. Như thế này
Giraldi

Biệt danh được yêu cầu ngay từ WP v.4.4.1
icc97

2

Vì dường như không có hook php nào tốt cho điều này nên cuối cùng tôi đã ẩn các trường bằng CSS sau đó loại bỏ chúng bằng 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

Từ diễn đàn hỗ trợ wordpress, bạn có thể loại bỏ bằng PHP. Điều này loại bỏ phần Giới thiệu về bản thân:

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');

Mã thay thế tiêu đề 'Giới thiệu về bản thân' bằng 'Mật khẩu' và sau đó loại bỏ bất cứ thứ gì giữa bảng đó và bảng tiếp theo mà nó tìm thấy (đó là bảng mật khẩu).

Ngoài ra plugin WP Hide Dashboard thực hiện thay thế jQuery tương tự nếu bạn muốn mở rộng điều đó.


Để tham khảo trong tương lai, bạn có thể muốn sử dụng admin_head-profile.phpadmin_footer-profile.phpthay vào đó

1

HÃY CẨN THẬN!!

1) Xóa một trường có thể không tốt , vì khi cập nhật, nếu bạn không gửi các trường thiết yếu đến móc cập nhật WORDPRESS, thì nó có thể đặt các giá trị trống cho các trường đó! (ví dụ: trong biểu mẫu gửi, nên tồn tại tức là <input name="username".../>)
Tôi nghĩ rằng, chỉ nên che giấu từ người dùng một cách trực quan, với jquery .hide();chứ không phải bằng .remove();
mã EXAMPLE để ẩn các trường " HIỂN THỊ TÊN " và " NICKNAME ":

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

2) Để ẩn thanh quản trị, có một tùy chọn đặc biệt trong menu wordpress (trong Cài đặt) . cho mã tùy chỉnh, như tức là

add_action('after_setup_theme', 'remove_admin_bar');

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

0

Sử dụng

add_action('admin_head', 'remove_profile_fields');

và thêm

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

trước JavaScript.


Một lời giải thích nhỏ sẽ là tuyệt vời!
bravokeyl

-4

Không có bộ lọc để vô hiệu hóa chúng.Nhìn vào nguồn ( /wp-admin/user-edit.php) khi bạn cần làm những thứ như thế này. Bạn có thể ẩn chúng bằng JS nhưng chúng vẫn có thể được hiển thị và các giá trị được cập nhật trên POST.

Chỉ có lựa chọn khả thi là tự hack lõi. Chỉ cần đảm bảo rằng bạn xử lý cập nhật và bỏ qua các trường này trên POST.


Có, tôi đã kiểm tra tập tin đó rồi! Giải pháp JS dường như không quá an toàn. Tôi sẽ xem những gì tôi có thể làm! Cảm ơn!
Rutwick Gangurde

3
Nếu giải pháp duy nhất bạn có thể nghĩ đến là hack core, thì có lẽ bạn không nên trả lời câu hỏi cụ thể đó. Bạn cũng không cần đề nghị người hỏi câu hỏi xem tệp đã được đề cập và bạn cũng không đúng khi nói rằng không có bộ lọc nào cả - chắc chắn bạn phải đọc câu hỏi và trả lời trước?
helenhousandi

@helenhousandi xoxo
EarnestoDev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.