WordPress как на ладони

Дополнительные колонки в таблице админки USERS

Пробовал по аналогии с статьей Дополнительные колонки KAMA

Дошел до сортировки и стопронулся - где-то не туда делаю запрос, может те кто понимает , быстро покажут мне мой недочет . думаю что недочет в 4 часте, но где не пойму

(в дальнейшем буду добавлять сортируемую колонку даты регистрации ) - пробовал через плагин, все работает , но не все плагины и не для всех целей мне по ФЭНШУЮ!

// создаем новую колонку // Колонка только создается и будет пустая 
add_filter('manage_users_columns', 'add_wpfp_column_user_page', 4);
function add_wpfp_column_user_page( $columns ){
	$num = 2; // после какой по счету колонки вставлять новые

	$new_columns = array(
		'wpfp_favorites_all' => 'Favorite',
	);

	return array_slice( $columns, 0, $num ) + $new_columns + array_slice( $columns, $num );
}

	// заполняем колонку данными
add_filter( 'manage_users_custom_column', 'add_wpfp_column_user_page_data', 10, 3 );
function add_wpfp_column_user_page_data( $val, $column_name, $user_id  ){
	$user_info  = get_userdata($user_id );
	$username   = $user_info->user_login;
	switch ($column_name) {
		case 'wpfp_favorites_all' :       
			return (int)count(wpfp_get_users_favorites( $username ));  // выводятся , целые числа, от 1 до 4000      
			break;
		default:
	}
	return $val;
}
// добавляем возможность сортировать колонку
add_filter('manage_users_sortable_columns', 'add_wpfp_sortable_column_data');
	function add_wpfp_sortable_column_data($sortable_columns){
		$sortable_columns['wpfp_favorites_all'] = array('wpfp_favorites_all_sort', desc ); // false = asc. desc - по умолчанию

		return $sortable_columns;
}

// Добавить запрос при сортировке колонки // без него нет никакой сортировки 
add_filter( 'request', 'add_column_wpfp_request_data' );
function add_column_wpfp_request_data( $vars ) {
	if ( 'wpfp_favorites_all_sort' == $vars['orderby'] ){
		$vars['meta_key'] = 'wpfp_favorites_all';
		$vars['orderby'] = 'meta_value_num';
	}
	return $vars;
}

вот для доп колонки даты регистрации код

/*
 * Create a column. And maybe remove some of the default ones
 * @param array $columns Array of all user table columns {column ID} => {column Name} 
 */
add_filter( 'manage_users_columns', 'rudr_modify_user_table' );

function rudr_modify_user_table( $columns ) {

	// unset( $columns['posts'] ); // maybe you would like to remove default columns
	$columns['registration_date'] = 'Registration date'; // add new

	return $columns;

}

/*
 * Fill our new column with the registration dates of the users
 * @param string $row_output text/HTML output of a table cell
 * @param string $column_id_attr column ID
 * @param int $user user ID (in fact - table row ID)
 */
add_filter( 'manage_users_custom_column', 'rudr_modify_user_table_row', 10, 3 );

function rudr_modify_user_table_row( $row_output, $column_id_attr, $user ) {

	$date_format = 'j M, Y H:i';

	switch ( $column_id_attr ) {
		case 'registration_date' :
			return date( $date_format, strtotime( get_the_author_meta( 'registered', $user ) ) );
			break;
		default:
	}

	return $row_output;

}

/*
 * Make our "Registration date" column sortable
 * @param array $columns Array of all user sortable columns {column ID} => {orderby GET-param} 
 */
add_filter( 'manage_users_sortable_columns', 'rudr_make_registered_column_sortable' );

function rudr_make_registered_column_sortable( $columns ) {
	return wp_parse_args( array( 'registration_date' => 'registered' ), $columns );
}
0
kolshix
5.9 лет назад 779
  • 0
    Kama9616

    Согласен, для таких колонок плагин юзать не всегда хорошая идея!

    В этой статье есть пример как изменять запрос. Там хук pre_get_users можно использовать.

    Вот пример сортировки по метаплю rating:

    // сортировка колонки
    is_admin() && add_action( 'pre_get_users', 'users_set_sort_query' );
    function users_set_sort_query( $uquery ){
    	if( ! is_admin() || get_current_screen()->id !== 'users' ) return;
    
    	$vars = $uquery->query_vars;
    
    	if(0){}
    	elseif( $vars['orderby'] === 'rating' ){
    		$uquery->set('meta_query', array( 'rat'=>['key'=>'rating', 'compare'=>'EXISTS', 'type'=>'NUMERIC' ]) );
    		$uquery->set('orderby', 'rat');
    	}
    }

    По коду из вопроса я не понял, зачем дата реги берется через фукнцию, она ведь в основной таблице присутствует?

    Бери проще, так и понятнее: $user->user_registered.

    kolshix 5.9 лет назад

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

    kolshix 5.9 лет назад

    с датой регистрации все работает (столбики добавляются и сортируются) , с избранными , нет, не хватает у меня опыта, необходимо из базы извлекать ЦЫФРУ по "count(wpfp_get_users_favorites( $username ))" - потом её куда-то отдавать , короче пока не решил.

    Kama 5.9 лет назад

    Судя по первому коду, который вроде как работает. Число храниться в метаполе wpfp_favorites_all, ты по нему пробовал сортировать. Звучит банально, но мало ли, может чет ты там затупил...

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация