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

时间:2013-04-08 作者:MidhuN

我想从用户联系信息中删除网站字段。我使用以下内容删除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);

5 个回复
最合适的回答,由SO网友:birgire 整理而成

重新访问并更新答案:

我们不能使用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} 与相应的字段名分开。

屏幕截图

Before removing the website row:Before

<小时>After removing the website row:After

SO网友:Jérome Obbiet

我用ob\\uufunctions和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();
}

SO网友:afrendeiro

在“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\');

SO网友:Patricia Walton

代码也不适用于我,但将add\\u操作更改为指向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\');

SO网友:Kenny

在@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\' );

结束

相关推荐

Contact Form 7数据作为附件

我希望通过联系人表单7提交的数据作为附件发送,而不是电子邮件正文中的文本/html。具体而言,我希望此附件采用CSV格式,该格式应与基于联系人表单7字段的格式相对直接,但这取决于是否可以将此文本放入附件中。这可能吗?非常感谢。