具有自定义字段的BP_HAS_MEMBERS

时间:2014-01-09 作者:Carlos

我想在概要文件自定义字段有条件的地方循环成员,让我解释一下,我在成员buddypress站点上有纬度和经度作为自定义字段,我需要使用bp\\U has\\U member只循环设置了纬度和经度的成员

if ( bp_has_members( \'per_page=0\' ) ) : ?>
endif;
我尝试过(“Dirección”是我的自定义xprofile,我正在使用它来筛选没有地址的成员),但是这不起作用,或者出现了问题。

bp_has_members( \'per_page=0&meta_key=Dirección&meta_value!=\\\'\\\'\' )
我尝试了很多方法,但都没有结果

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

Buddypress\'bp_has_members() 函数接受多个参数以更改输出。看看Accepted Parameters codex页面上有关成员循环的部分。两个参数meta_keymeta_value 可能正是你想要的。这个Code Examples 第节应为您提供有关如何进行更正的更多见解。

<小时>

Update:

首先,不能使用»不相等|!=«运算符,就像您在评论中所做的那样。

其次,@MarutiMohanty关于参数正确值的使用可能是正确的。您可能想要调试您的usermeta,您可以使用下面的代码在您的成员循环页面上输出此信息-它进入您的functions.php.

Code:

add_action( \'bp_before_members_loop\', \'wpse129106_usermeta_debug\' );
function wpse129106_usermeta_debug() {
    $user_id = get_current_user_id();
    $all_meta_for_user = get_user_meta( $user_id );
    echo \'<pre>\';
    print_r( $all_meta_for_user );
    echo \'</pre>\';
}
第三,在对这种情况进行了快速测试之后,我可以说,下面显示的所有方法对我来说都很好。

Code:

// query string, only key - works
$qs_args_key = \'per_page=0&meta_key=uniquekey\';

// query string, key and value - works
$qs_args_key_and_value = \'per_page=0&meta_key=uniquekey&meta_value=uniquevalue\';

// arguments array, key and value - works
$args_array = array(
    \'per_page\' => 0,
    \'meta_key\' => \'uniquekey\',
    \'meta_value\' => \'uniquevalue\'
);

// replace the variable to test the options
if ( bp_has_members( $args_array ) ) : 
<小时>

2nd Update:

由于您希望能够比较元值,因此需要做一些额外的工作。这几乎遵循了buddypress codex example 我向你推荐了上述建议<简而言之,请阅读codex页面上的解释以了解详细信息,我们创建了一个函数,用于比较和过滤相应的ID,并利用include 参数bp_has_members() 有我稍微修改了建议的示例,首先,我提出了第三个参数-$compare - 其次,通过更改负责处理比较选项的SQL语句的条件。代码进入您的functions.phpbp-custom.php.

Code:

function wpse129106_bp_member_ids_by_field( $field_name, $field_value = \'\', $compare = \'=\' ) {
    if ( empty( $field_name ) )
        return \'\';

    global $wpdb;

    $field_id = xprofile_get_field_id_from_name( $field_name );

    if ( !empty( $field_id ) )
        $query = "SELECT user_id FROM " . $wpdb->prefix . "bp_xprofile_data WHERE field_id = " . $field_id;
    else
        return \'\';

    if ( !empty( $query ) ) {    
        if ( $compare == \'LIKE\' || $compare == \'NOT LIKE\' ) {
            $query .= " AND value " . $compare . " \'%" . $field_value . "%\'";
        } else if ( $compare == \'=\' && $field_value == \'\' ) {
            $query = "SELECT DISTINCT user_id FROM " . $wpdb->prefix . "bp_xprofile_data";
            $query .= " WHERE user_id NOT IN";
            $query .= " (SELECT user_id FROM " . $wpdb->prefix . "bp_xprofile_data WHERE field_id = " . $field_id . " AND value != \'\')";
        } else {
            $query .= " AND value " . $compare . " \'" . $field_value . "\'";
        }
    } else {
        return \'\';
    }

    $custom_ids = $wpdb->get_col( $query );

    if ( !empty( $custom_ids ) ) {
        $custom_ids_str = \'include=\' . implode(",", $custom_ids);
        return $custom_ids_str;
    } else {
        return \'\'; 
    }
}
您可以像在本例中一样使用它来更改成员循环:

if ( bp_has_members( 
         \'per_page=0&\' . 
         wpse129106_bp_member_ids_by_field(
             \'First Name\',
             \'yourvalue\',
             \'!=\' 
         ) 
     ) 
   ) :

SO网友:jay kanakiya

要在成员之间循环以使其具有自定义xprofile数据,请在member\\u循环内创建一个if块。

代码:-

<?php if ( bp_has_members() ) : ?>
 <?php while ( bp_members() ) : bp_the_member(); $userId = bp_get_member_user_id() ?>
  <?php $user = new WP_User( $userId );
  if(xprofile_get_field_data( \'Dirección\' , $userId ) != \'\' ) : ?>

   <?php bp_member_name();//Here is where you will have the loop ?>

  <?php endif; ?>
 <?php endwhile; ?>
<?php endif; ?>

结束

相关推荐

BuddyPress:在成员个人资料上显示多种自定义帖子类型

GOAL我们在Buddypress中有几个插件,可以在成员的个人资料页面中显示帖子(显示用户的帖子),其中一些插件不再工作(个人资料上的bp帖子)或新的插件(TCH\\u PostsOnProfile),还有一些插件的工作方式类似于(buddyblog)但还没有显示多个自定义帖子类型,我决定尝试在没有插件的情况下执行,在这个网站的帮助下,我收集了一些片段,并创建了一个几乎可以使用的新选项卡,其中包含了成员的自定义帖子if 对创建特定帖子类型的用户角色有条件。我已成功地在buddypress中的成员配置文件