如何通过ACF字段过滤BuddyPress成员循环?

时间:2019-03-10 02:01:08

标签: wordpress advanced-custom-fields buddypress

PHP newb在这里,需要一些指导。我正在使用BuddyPress和高级自定义字段(ACF)。我有一个值为true / false的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的中间代码:

    function 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 '';
    
    }
    

当然,我也乐于以其他方式解决这个问题。我希望这很清楚。

0 个答案:

没有答案