Customize profile.php

时间:2017-07-13 作者:SoloCrowd

使用插件“高级自定义字段”:https://wordpress.org/plugins/advanced-custom-fields/我可以将自定义字段添加到配置文件中。php。

But how do I remove the default elements from profile.php (Personal Options, Name, etc.)?

我知道我可以在我的子主题中创建新的模板文件来覆盖页面的外观,但我找不到如何使用配置文件来实现这一点。php。

我开始使用CSS来隐藏元素,除了没有类或ID的标题之外,这是可行的,我不能简单地隐藏整个表单,因为高级自定义字段将新元素放置在相同的表单中。

我宁愿远离那些在现有系统上创建前端用户帐户的大型插件,这样我就可以得到一个定制的个人资料编辑页面。

谢谢你的帮助。

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

可能有几个选项可以实现你的目标,下面是我展示的选项之一
(这两个功能相互关联)

请始终复制functions.php 在开始编辑/添加插件或其他代码段之前。

/**
 * Remove fields from an user profile page for all except Administrator
 *
 * FYI {@link https://codex.wordpress.org/Function_Reference/current_user_can}
 *     {@link https://codex.wordpress.org/Roles_and_Capabilities}
 *     {@link https://codex.wordpress.org/Plugin_API/Action_Reference/admin_footer}
 *     {@link https://developer.wordpress.org/reference/hooks/load-pagenow/}
 *
 * Checked with @version WordPress 4.8
 */
add_action(\'admin_init\', \'wpse273289_remove_profile_fields\' ); 
function wpse273289_remove_profile_fields()
{ 
    global $pagenow;

    // apply only to user profile or user edit pages
    if( $pagenow !==\'profile.php\' && $pagenow !==\'user-edit.php\' )
    {
        return;
    }

    // Make it happen for all except Administrators
    if( current_user_can( \'manage_options\' ) )
    {
        return;
    }

    add_action( \'admin_footer\', \'wpse273289_remove_profile_fields_js\' ); 
}

/**
 * Remove (below)selected fields on user profile
 * This function belongs to the wpse273289_remove_profile_fields function!
 * 
 */
function wpse273289_remove_profile_fields_js()
{
    ?>
    <script>
    jQuery(document).ready( function($) {
        $(\'input#user_login\').closest(\'tr\').remove(); // Username
        $(\'input#first_name\').closest(\'tr\').remove(); // First Name
        $(\'input#nickname\').closest(\'tr\').remove();   // Nickname (required)            
        $(\'input#email\').closest(\'tr\').remove();       // Email (required)
    });
    </script>
    <?php
}
脚本中的上述字段只是示例,请根据自己的喜好进行调整
这两个函数都在本地沙盒中检查并为我工作

注意:以上未使用ACF插件进行测试,但这应该不是问题。

SO网友:Juraj.Lorinc

另一种选择是使用css禁用/隐藏这些元素。

首先,您需要添加函数,该函数将根据用户角色添加body类:

function your_prefix_add_admin_body_class( $classes ) {
    $roles = wp_get_current_user()->roles;
    return "$classes ".implode(\' \', $roles);
}

add_filter( \'admin_body_class\', \'your_prefix_add_admin_body_class\' );
然后将自定义css添加到管理员:

function your_prefix_custom_css() {
    echo \'<style>
        body:not(.administrator) .user-user-login-wrap,
        body:not(.administrator) .user-first-name-wrap,
        body:not(.administrator) .user-last-name-wrap{
            display: none;
        }
    </style>\';
}

add_action(\'admin_head\', \'your_prefix_custom_css\');
请记住,这不是最安全的解决方案。如果用户知道一点css,他可以重新启用它。

结束

相关推荐

Wrong wp-admin URL

我刚安装了一个WordPress站点,并在一个反向代理后面配置了该站点的URL-http://example.com/hello问题我可以访问admin dashboard页面,但由于链接变为http://example.com/wp-admin 而不是http://example.com/hello/wp-admin. 我怎样才能摆脱这种奇怪的行为?可能有帮助的详细信息</我确信WordPress地址(URL)和站点地址(URL)配置为http://example.com/hello, 我甚至检查