首页 > 解决方案 > 如何通过 ACF 字段过滤 BuddyPress 成员循环?

问题描述

PHP新手在这里,寻找一些指导。我正在使用 BuddyPress 和高级自定义字段 (ACF)。我有一个值为真/假的 ACF 字段“new_user”。我正在尝试过滤我的 BuddyPress 成员循环以仅显示值为 'new_user' = true 的用户。

这里有 2 个代码示例。

  1. 标准的 BP 成员循环。我的想法是,如何首先通过 ACF 'new_user' = true 查询我的用户,然后启动 bp 成员循环?:
if ( bp_has_members() ) : 
// some code goes here 
endif; 

while ( bp_members() ) : bp_the_member(); 
//OUTPUT MEMBERS LIST HERE
endwhile;
  1. 这是一个按 Buddypress 扩展用户字段过滤的 BP 功能。我认为这里的想法是用适当的 ACF 代码替换中间特定于 xprofile_get_field 的代码:

    功能 my_custom_ids( $field_name, $field_value = '' ) {

      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 ( $field_value != '' ) 
        $query .= " AND value LIKE '%" . $field_value . "%'";
          /* 
          LIKE is slow. If you're sure the value has not been serialized, you can do this:
          $query .= " AND value = '" . $field_value . "'";
          */
    
      $custom_ids = $wpdb->get_col( $query );
    
      if ( !empty( $custom_ids ) ) {
        // convert the array to a csv string
        $custom_ids_str = 'include=' . implode(",", $custom_ids);
        return $custom_ids_str;
      }
      else
       return '';
    
    }
    

当然,我也愿意以另一种方式解决这个问题。我希望这很清楚。

标签: wordpressadvanced-custom-fieldsbuddypress

解决方案


推荐阅读