2

我知道 BuddyPress 中有一种方法可以帮助隐藏一些配置文件字段:

function bp_has_profile( $args = '' ) {
    global $profile_template;

    // Only show empty fields if we're on the Dashboard, or we're on a user's profile edit page,
    // or this is a registration page
    $hide_empty_fields_default = ( !is_network_admin() && !is_admin() && !bp_is_user_profile_edit() && !bp_is_register_page() );

    // We only need to fetch visibility levels when viewing your own profile
    if ( bp_is_my_profile() || bp_current_user_can( 'bp_moderate' ) || bp_is_register_page() ) {
        $fetch_visibility_level_default = true;
    } else {
        $fetch_visibility_level_default = false;
    }

    $defaults = array(
        'user_id'             => bp_displayed_user_id(),
        'profile_group_id'    => false,
        'hide_empty_groups'   => true,
        'hide_empty_fields'   => $hide_empty_fields_default,
        'fetch_fields'        => true,
        'fetch_field_data'    => true,
        'fetch_visibility_level' => $fetch_visibility_level_default,
        'exclude_groups'      => false, // Comma-separated list of profile field group IDs to exclude
        'exclude_fields'      => false  // Comma-separated list of profile field IDs to exclude
    );

    $r = wp_parse_args( $args, $defaults );
    extract( $r, EXTR_SKIP );

    $profile_template = new BP_XProfile_Data_Template( $user_id, $profile_group_id, $hide_empty_groups, $fetch_fields, $fetch_field_data, $exclude_groups, $exclude_fields, $hide_empty_fields, $fetch_visibility_level );
    return apply_filters( 'bp_has_profile', $profile_template->has_groups(), $profile_template );
}

我不确定如何调用此方法并传递 'exclude_fields' => $IDs_to_hide

4

4 回答 4

0

是的,可以从个人资料页面隐藏某些字段。

首先进入你的主题文件夹中的edit.php。这里如果你想隐藏文本框并且名称是“全名”。

<?php if ( 'textbox' == bp_get_the_profile_field_type() ) : ?>
    <?php if ( 'Full Name' != bp_the_profile_field_name() ) : ?>
         <label for="<?php bp_the_profile_field_input_name(); ?>"><?php bp_the_profile_field_name(); ?> <?php if ( bp_get_the_profile_field_is_required() ) : ?><?php _e( '(required)', 'buddypress' ); ?><?php endif; ?></label>
         <input type="text" name="<?php bp_the_profile_field_input_name(); ?>" id="<?php bp_the_profile_field_input_name(); ?>" value="<?php bp_the_profile_field_edit_value(); ?>" <?php if ( bp_get_the_profile_field_is_required() ) : ?>aria-required="true"<?php endif; ?>/>
      <?php endif; ?>
<?php endif; ?>

上面的代码与 profile.php 文件中的代码相同,但我只会将新的 if 条件放入其他 Radiobutton 和 Selectbox 等中。

您的个人资料中不会显示您的全名个人资料字段。

于 2012-11-27T05:56:46.023 回答
0

不确定是否有办法使用您的主题功能执行此操作,但您可以轻松地将其隐藏在编辑循环中。将 /buddypress/members/single/profile/edit.php 复制到您的主题并添加以下行:

<?php if ( 'Field Name' == bp_get_the_profile_field_name() ) continue; ?>

就在这条线的下方:

<?php while ( bp_profile_fields() ) : bp_the_profile_field(); ?>

这类似于 Chirag 的方法,但会跳过与该字段相关的所有内容,包括包装器 div,因此您没有多余的 HTML。

于 2013-07-08T17:09:08.520 回答
0

您可以使用 CSS 隐藏带有 id 选择器的特定字段。

#field_1 {
display:none;
}
#signup_username {
display:none;
}
于 2016-08-02T16:40:05.930 回答
0

您可以通过bp_before_has_profile_parse_args过滤器做到这一点:

function skip_xprofile_fields( $args ){
    global $bp, $wpdb;
    $field_name = 'First Name';
    $field_id = $wpdb->get_var( "SELECT id FROM {$bp->profile->table_name_fields} WHERE `name` = '".esc_sql($field_name)."'");
    $args['exclude_fields'] = ','.$field_id;
    return $args;
}
add_filter('bp_before_has_profile_parse_args', 'skip_xprofile_fields' );

只需将$field_namevar 替换为您的字段名称即可。

于 2018-06-25T20:13:58.067 回答