Xóa trang web của Wikipedia Trang lĩnh vực từ thông tin liên hệ


8

Tôi muốn xóa trường trang web khỏi thông tin liên hệ của người dùng. Tôi sử dụng cách sau để xóa AIM, Jabber và Yahoo IM. Nhưng tôi không thể sử dụng điều này để xóa trang web. Ai đó giúp em với.

function remove_contactmethods( $contactmethods ) {
    unset($contactmethods['aim']);
    unset($contactmethods['yim']);
    unset($contactmethods['jabber']);
    return $contactmethods;
}
add_filter('user_contactmethods','remove_contactmethods',10,1);

Câu trả lời:


11

Xem lại và cập nhật câu trả lời:

Chúng tôi không thể sử dụng user_contactmethodsbộ lọc để xóa trình bao bọc trang web, vì phần này được mã hóa cứng trong user-edit.phptệp và không phải là một phần của vòng lặp liên hệ người dùng có thể lọc , được tạo bởi:

wp_get_user_contact_methods( $profileuser )

Ẩn nó bằng CSS

Phần tử hàng của trang web giờ đây có .user-url-wraplớp riêng :

<tr class="user-url-wrap">
    <th><label for="url"><?php _e('Website') ?></label></th>
    <td>
        <input type="url" name="url" id="url" 
               value="<?php echo esc_attr( $profileuser->user_url ) ?>" 
               class="regular-text code" />
    </td>
</tr>

Trước đây chúng tôi phải sử dụng jQuery, để nhắm mục tiêu hàng cha của #urltrường, để xóa.

Nhưng bây giờ chúng ta có thể dễ dàng nhắm mục tiêu trình bao bọc trang web và ẩn nó bằng CSS:

function remove_website_row_wpse_94963_css()
{
    echo '<style>tr.user-url-wrap{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'remove_website_row_wpse_94963_css' );
add_action( 'admin_head-profile.php',   'remove_website_row_wpse_94963_css' );

Ẩn các lĩnh vực khác

Có các lớp hàng tương tự:

tr.user-{field}-wrap

có sẵn cho các lĩnh vực:

admin-color,
comment-shortcuts,
admin-bar-front,
user-login,
role,
super-admin,
first-name, 
last-name, 
nickname, 
display-name, 
email,
description, 
pass1, 
pass2, 
sessions, 
capabilities,
...

bao gồm tất cả các trường từ các phương thức liên hệ người dùng động .

Ở đây chúng ta chỉ cần thay thế {field}một phần với tên trường tương ứng.

Ảnh chụp màn hình

Trước khi xóa hàng trang web: Trước


Sau khi xóa hàng trang web: Sau


4
Bạn nên sử dụng .remove()thay vì.hide()
Bai Internet

Điều này không làm việc cho tôi. Mã này nên được đặt trong finctions.php phải không ??
MidhuN

Bạn phải là người không phải là quản trị viên khi bạn kiểm tra nó hoặc nhận xét ifcâu với bài kiểm tra khả năng. Nó hoạt động functions.php, nhưng tôi nghĩ tốt hơn là nên có nó trong một plugin để bạn không mất nó khi bạn thay đổi chủ đề.
bạch dương

Làm thế nào về điều nàyapply_filters( "user_{$name}_label", $desc );
Brad Dalton

Điều này chỉ sửa đổi các nhãn, cho các phương thức liên hệ được tạo động chứ không phải các trường văn bản đầu vào tương ứng. Trường trang web cũng không phải là một phần của các phương thức liên hệ động này . Mặc dù vậy, sẽ rất hữu ích khi có các bộ lọc như vậy cho toàn bộ user-*-wrapcác bộ phận ;-) @BradDalton
birgire

5

Tôi đã giải quyết vấn đề với các hàm ob_ và DOMDocument. Nó tốt hơn jQuery hoặc CSS để bảo vệ biểu mẫu.

Tôi sử dụng loại giải pháp này mỗi khi tôi không thể truy cập một phần nội dung HTML thông qua một cái móc.

function remove_extra_field_profile()
{

    $current_file_url =  preg_replace( "#\?.*#" , "" , basename( $_SERVER['REQUEST_URI'] ) );

    if( $current_file_url == "profile.php" )
    {
        add_action( 'wp_loaded', function(){ ob_start("profile_callback"); } );
        add_action( 'shutdown', function(){ ob_end_flush(); } );
    }
}
add_action( 'init', 'remove_extra_field_profile' );


function profile_callback( $html )
{
    $profile_dom = new DOMDocument;
    $profile_dom->loadHTML( $html );

    $all_lines = $profile_dom->getElementsByTagname( 'tr' );

    $excludes = array(
        'user-rich-editing-wrap',
        'user-admin-color-wrap',
        'user-comment-shortcuts-wrap',
        'show-admin-bar user-admin-bar-front-wrap',
        'user-url-wrap',
        'user-description-wrap'
        );

    $deletes = array();

    foreach ( $all_lines as $line ) 
    {
        $tr_calss = $line->getAttribute("class");

        if( in_array( $tr_calss, $excludes ) )
        {
            $deletes[] = $line;
        }
    }

    $deletes[] = $profile_dom->getElementsByTagname( 'h2' )->item(0);

    foreach ($deletes as $delete) 
    {
        $delete->parentNode->removeChild( $delete );
    }

    return $profile_dom->saveHTML();
}

Này, điều này thật tuyệt.
Michael Mizner

2

Mở rộng trên @ birgire's và biện minh cho câu trả lời của @Patricia Walton, nếu bạn chỉ thêm

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');

nó sẽ chỉ đi từ trang mà quản trị viên đang chỉnh sửa một hồ sơ. Để làm cho nó biến mất khi người dùng chỉnh sửa hồ sơ của riêng mình, hãy thêm

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, như thế này:

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // hide only for non-admins
        echo "<script>jQuery(document).ready(function(){jQuery('#url').parents('tr').remove();});</script>";
    }
}
add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');
add_action('admin_head-profile.php','remove_website_row_wpse_94963');

1
Bạn đang thiếu một phần ba add_action cho trang người dùng mới:add_action('admin_head-user-new.php','remove_website_row_wpse_94963');
guideod

1

Mã này cũng không hoạt động với tôi, nhưng việc thay đổi add_action để trỏ đến profile.php đã hoạt động.

function remove_website_row_wpse_94963() {
    if(!current_user_can('manage_options')){
        // hide only for non-admins
        echo "<script>jQuery(document).ready(function()    
            {jQuery('#url').parents('tr').remove();});</script>";
    }
}

add_action('admin_head-user-edit.php','remove_website_row_wpse_94963');

Tôi không thể nhìn thấy những gì mã bạn đã đăng mẫu khác nhau @birgire.
gmazzap

0

Mở rộng câu trả lời của @ birgire, tôi đã viết nó thành một mảng để dễ đọc hơn một chút:

function awb_remove_user_profile_fields_with_css() {
//Hide unwanted fields in the user profile
$fieldsToHide = [
    'rich-editing',
    'admin-color',
    'comment-shortcuts',
    'admin-bar-front',
    'user-login',
    'role',
    'super-admin',
    //'first-name', 
    //'last-name', 
    'nickname', 
    'display-name', 
    //'email',
    'description', 
    //'pass1', 
    //'pass2', 
    'sessions', 
    'capabilities',
    'syntax-highlighting',
    'url'

    ];

    //add the CSS
    foreach ($fieldsToHide as $fieldToHide) {
        echo '<style>tr.user-'.$fieldToHide.'-wrap{ display: none; }</style>';
    }

    //fields that don't follow the wrapper naming convention
    echo '<style>tr.user-profile-picture{ display: none; }</style>';

    //all subheadings
    echo '<style>#your-profile h2{ display: none; }</style>';
}
add_action( 'admin_head-user-edit.php', 'awb_remove_user_profile_fields_with_css' );
add_action( 'admin_head-profile.php',   'awb_remove_user_profile_fields_with_css' );
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.