-
-
Save spythemes/a7b95add15cecce571929a0f147bc143 to your computer and use it in GitHub Desktop.
WPMU M2 add more sortable bp xprofile column in all members table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Set BP xProfile fields in line 16: $this->_bp_fields = array( 'Gender', 'Gwint', 'True Color' ); | |
*/ | |
if( ! class_exists( 'Make_M2_Member_Column_Sortable_BP' ) ) | |
{ | |
class Make_M2_Member_Column_Sortable_BP | |
{ | |
private $_bp_fields = array(); | |
private function __construct() | |
{ | |
// Here to set BP xprofile fields | |
$this->_bp_fields = array('Gender', 'Gwint', 'True Color' ); | |
add_filter( 'ms_helper_listtable_member_get_columns', array( $this, 'ms_helper_listtable_member_get_columns' ) ); | |
add_filter( 'ms_helper_listtable_member_default_value', array( $this, 'ms_helper_listtable_member_default_value' ), 10, 3 ); | |
add_filter( 'ms_helper_listtable_member_get_sortable_columns', array( $this, 'ms_helper_listtable_member_get_sortable_columns' ) ); | |
add_filter( 'ms_model_member_get_members', array( $this, 'ms_model_member_get_members' ), 10, 3 ); | |
} | |
static public function get_instance() | |
{ | |
static $Inst = null; | |
if( null == $Inst ) | |
{ | |
$Inst = new self(); | |
} | |
} | |
public function set_sorting_val( $members, $var ) | |
{ | |
if( ! function_exists( 'bp_get_profile_field_data' ) ) return $members; | |
foreach( $members as $key => $member ) | |
{ | |
$members[$key]->_saved_data[$var] = bp_get_profile_field_data( array( 'field' => $var, 'user_id' => $member->id ) ); | |
} | |
return $members; | |
} | |
public function ms_helper_listtable_member_get_columns( $columns ) | |
{ | |
foreach( $this->_bp_fields as $field ) | |
{ | |
$columns[ strtolower( $field ) ] = $field; | |
} | |
$columns = array('avatar'=>'Avatar') + $columns; | |
return $columns; | |
} | |
public function ms_helper_listtable_member_default_value( $html, $member, $column_name ) | |
{ | |
$user_id = $member->id; //get member user ID; | |
$args = array( | |
'field' => $column_name, | |
'user_id' => $member->id | |
); | |
if ($column_name == 'avatar') | |
return get_avatar($member->id, 64); | |
else | |
return function_exists( 'bp_get_profile_field_data' ) ? bp_get_profile_field_data( $args ) : $html; | |
} | |
public function ms_helper_listtable_member_get_sortable_columns( $columns ) | |
{ | |
/* Making the membership column sortable */ | |
$columns['membership'] = array('membership', false); | |
$columns['username'] = array('username', false); | |
$columns['e-mail'] = array('e-mail', false); | |
foreach( $this->_bp_fields as $field ) | |
{ | |
$columns[ strtolower( $field ) ] = array( strtolower( $field ), false ); | |
} | |
return $columns; | |
} | |
public function ms_model_member_get_members( $members, $ids, $args ) | |
{ | |
$bp_fields = array_map( 'strtolower', $this->_bp_fields ); | |
if( in_array( $args['orderby'], $bp_fields ) ) | |
{ | |
$members = $this->set_sorting_val( $members, $args['orderby'] ); | |
$key = $args['orderby']; | |
$order = $args['order']; | |
usort( $members, function( $a, $b ) use( $key, $order ) { | |
return $order == 'asc' ? strcmp( $a->_saved_data[$key], $b->_saved_data[$key] ) : strcmp( $b->_saved_data[$key], $a->_saved_data[$key] ); | |
} ); | |
} | |
return $members; | |
} | |
} | |
Make_M2_Member_Column_Sortable_BP::get_instance(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment