从联系信息中删除“网站”字段


9

我想从用户联系信息中删除网站字段。我使用以下内容删除AIM,Jabber和Yahoo IM。但是我无法使用它删除网站。有人请帮忙。

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

Answers:


12

回顾和更新答案:

我们无法使用user_contactmethods过滤器删除网站包装程序,因为这部分内容被硬编码在user-edit.php文件中,而不是可过滤的用户联系人循环的一部分,该 循环由以下内容生成:

wp_get_user_contact_methods( $profileuser )

用CSS隐藏它

网站排元素现在有它自己的.user-url-wrap类:

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

以前,我们不得不使用jQuery来定位#url要删除的字段的父行。

但是现在我们可以轻松地将网站包装定位为目标,并使用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' );

隐藏其他领域

有类似的行类:

tr.user-{field}-wrap

适用于以下字段:

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,
...

包括动态用户联系方式中的所有字段。

在这里,我们只用{field}相应的字段名称替换零件。

屏幕截图

删除网站行之前: 之前


删除网站行后: 后


4
您应该使用.remove()的,而不是.hide()
Bainternet

这对我不起作用。这段代码应该放在finctions.php中吗?
2013年

测试它或if使用功能测试注释掉该句子时,您必须是非管理员。它可以在中运行functions.php,但我认为最好将其包含在插件中,这样在更改主题时不要松开它。
birgire

怎么样apply_filters( "user_{$name}_label", $desc );
Brad Dalton 2015年

对于动态创建的contact方法,这只会修改标签,而不会修改相应的输入文本字段。该网站领域也没有这些有活力的部分 接触的方法。不过,对于整个user-*-wrap零件都具有此类过滤器会很方便;-) @BradDalton
birgire 2015年

5

我使用ob_函数和DOMDocument解决了该问题。它比jQuery或CSS保护表单更好。

每当我无法通过钩子访问部分HTML内容时,都会使用这种解决方案。

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

嘿,太好了。
Michael Mizner

2

如果只添加,则扩展@birgire并证明@Patricia Walton的答案合理

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

它只会从管理员正在编辑配置文件的页面上消失。为了使它在用户编辑自己的个人资料时消失,还添加

add_action('admin_head-profile.php','remove_website_row_wpse_94963');, 像这样:

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
您缺少新用户页面的三分之一add_action:add_action('admin_head-user-new.php','remove_website_row_wpse_94963');
guidod

1

该代码对我也不起作用,但是更改add_action以指向profile.php确实起作用。

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

我看不到您发布的代码与@birgire一种不同的形式。
gmazzap

0

扩展@birgire的答案,我将其写入数组,以便于阅读:

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' );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.