Как отфильтровать членский цикл BuddyPress по полю ACF? - PullRequest
1 голос
/ 10 марта 2019

PHP новичок здесь, ищет некоторые рекомендации.Я работаю с BuddyPress и Advanced Custom Fields (ACF).У меня есть поле ACF 'new_user' со значением true / false.Я пытаюсь отфильтровать цикл членов 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;

Это функция BP для фильтрации по расширенным пользовательским полям Buddypress.Идея здесь заключается в том, чтобы заменить код в середине, специфичный для xprofile_get_field, на соответствующий код ACF:

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

}

Конечно, я открыт для решения этой проблемы и другим способом.Надеюсь, это понятно.

...