Members Loop Query
<?php if ( bp_has_members( bp_ajax_querystring( \'members\' ) ) ) : ?>
Question: How can this function be integrated into the members loop so that Female members are served a directory of males and male members are served a directory of females?**
<?php
class BP_Custom_User_Ids {
private $custom_ids = array();
public function __construct() {
$this->custom_ids = $this->get_custom_ids();
add_action( \'bp_pre_user_query_construct\', array( $this, \'custom_members_query\' ), 1, 1 );
add_filter( \'bp_get_total_member_count\', array( $this, \'custom_members_count\' ), 1, 1 );
}
private function get_custom_ids() {
global $wpdb;
// collection based on an xprofile field
$custom_ids = $wpdb->get_col("SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = \'Female\'");
return $custom_ids;
}
function custom_members_query( $query_array ) {
$query_array->query_vars[\'include\'] = $this->custom_ids;
}
function custom_members_count ( $count ) {
$new_count = count( $this->custom_ids );
return $count - $new_count;
}
}
function custom_user_ids( ) {
new BP_Custom_User_Ids ();
}
add_action( \'bp_before_directory_members\', \'custom_user_ids\' );
Example: if {current user is "female" (filter members loop to show only males)}
else if {current user is "male" (filter loop to show only females)}
最合适的回答,由SO网友:shanebp 整理而成
这是我们讨论的解决方案http://buddypress.org/support/topic/filter-members-list-based-on-profile-field/
它基于http://codex.buddypress.org/developer/bp_user_query/#code-examples
class BP_Custom_User_Ids {
private $custom_ids = array();
public function __construct() {
$this->custom_ids = $this->get_custom_ids();
add_action( \'bp_pre_user_query_construct\', array( $this, \'custom_members_query\' ), 1, 1 );
add_filter( \'bp_get_total_member_count\', array( $this, \'custom_members_count\' ), 1, 1 );
}
private function get_custom_ids() {
global $wpdb;
//figure out if the logged-in user is male or female
$sex = xprofile_get_field_data( 5, bp_loggedin_user_id() );
if ( $sex == \'Male\' )
$query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = \'Female\'";
else
$query = "SELECT user_id FROM {$wpdb->prefix}bp_xprofile_data WHERE field_id = 5 AND value = \'Male\'";
$custom_ids = $wpdb->get_col( $query );
return $custom_ids;
}
function custom_members_query( $query_array ) {
$query_array->query_vars[\'include\'] = $this->custom_ids;
}
function custom_members_count ( $count ) {
$new_count = count( $this->custom_ids );
return $new_count;
}
}
function custom_user_ids( ) {
new BP_Custom_User_Ids ();
}
add_action( \'bp_before_directory_members\', \'custom_user_ids\' );