Intereting Posts

bp_has_members с пользовательскими полями

Я хочу, чтобы члены цикла, в которых пользовательские поля профиля имеют условие, позвольте мне объяснить, что у меня есть широта и долгота как пользовательские поля на сайте buddypress членов, и мне нужно зацикливать только членов, которые установили широту и долготу, используя bp_has_member

if ( bp_has_members( 'per_page=0' ) ) : ?> endif; 

Я пробовал («Dirección» – это мой собственный xprofile, который я использую для фильтрации члена без адреса), однако это не работает или что-то не так.

 bp_has_members( 'per_page=0&meta_key=Dirección&meta_value!=\'\'' ) 

Я стараюсь разными способами без какого-либо результата

Solutions Collecting From Web of "bp_has_members с пользовательскими полями"

Функция Buddypress ' bp_has_members() принимает несколько параметров для изменения вывода. Взгляните на раздел « Принятые параметры » на странице codex относительно цикла элементов. Два параметра meta_key и meta_value могут быть только тем, что вы ищете. Раздел « Примеры кода » должен дать вам дополнительную информацию о том, как это сделать – правильно.


Обновить:

Во-первых , вы не можете использовать «не равный | != «, Как вы делали в своем комментарии.

Во-вторых , @MarutiMohanty может быть прав относительно использования правильных значений для параметров. Возможно, вам захочется отладить вашу usermeta, вы можете использовать нижеприведенный код для вывода этой информации на странице цикла членов – она ​​входит в ваши functions.php .

Код:

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

В-третьих , после того, как эта ситуация стала действительно быстрой, я могу сказать, что все приведенные ниже подходы просто отлично подходят для меня.

Код:

 // 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 ) ) : 

Второе обновление:

Поскольку вы хотите иметь возможность сравнивать мета-ценность, вы делаете дополнительную работу. Это в значительной степени следует за шаблоном, который предлагает пример buddypress codex, на котором я ссылался выше.
Короче говоря, прочитайте объяснение на странице codex для получения подробной информации, мы создаем функцию, которая сравнивает и фильтрует идентификаторы соответственно, при этом мы используем параметр bp_has_members() имеет bp_has_members() . Я немного адаптировал предложенный пример, во-первых , сделав третий аргумент – $compare – возможный, а во-вторых , изменив условный оператор SQL, который обрабатывает параметр сравнения. Код входит в ваши functions.php bp-custom.php или bp-custom.php .

Код:

 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', '!=' ) ) ) : 

Для прокрутки элементов таким образом, чтобы они имели пользовательские данные xprofile, создайте блок if внутри member_loop.

Код: –

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