Wordpress сортировка списка записей по дополнительным колонкам
PHP Wordpress

WordPress сортировка списка записей по дополнительным колонкам

В предыдущем посту мы разобрались как добавить дополнительные колонки в админку WordPress. А сегодня сделаем так, чтобы заработала в нашем WordPress сортировка списка записей по дополнительным колонкам.

Фильтр, снова фильтр

Как и большинство остальных мест, которые можно кастомизировать и настроить под себя, колонки, в том числе и кастомные (добавленные программистом в дополнение к уже имеющимся колонкам в WordPress), можно отфильтровать и добавить собственные значения, обработчики, действия и т. п.

Для того, чтобы сделать дополнительные/кастомные колонки в админке сортируемыми также есть свой фильтр. Это фильтр manage_edit-{posttype}_sortable_column, вместо posttype нужно подставить название вашего типа записей.

add_filter( ‘manage_edit-country_sortable_columns’, ‘my_sortable_country_column’ );
function my_sortable_cake_column( $columns ) {
$columns[‘planet’] = ‘planet’;

//А чтобы сделать колонку не сортируемой, просто нужно удалить её из массива $columns
//unset($columns[‘date’]);
return $columns;

}

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

Как сделать сортировку не по строке

А что если нам нужно отсортировать не по строке, а по какому-то другому критерию, например по количеству взаимосвязей, а в колонке выводится не просто значение, а какая-нибудь ссылка?

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

В этом хуке, мы сначала проверим, что имеем дело с админкой (чтобы не отсортировать ещё и фронтальную часть. Затем, если в $_GET у нас задано наше кастомное поле для сортировки, добавим сортировку в query.

add_action( ‘pre_get_posts’, ‘my_planet_orderby’ );
function my_slice_orderby( $query ) {
if( ! is_admin() )
return;

$orderby = $query->get( ‘orderby’);
if( ‘planet’ == $orderby ) {
$query->set(‘meta_key’,’planets’);
$query->set(‘orderby’,’meta_value_num’);
}

}

Таким образом, мы дополнили сортировку в WP_Query, таким образом, чтобы по нашей колонке сортировка работала со сравнением не строк, а чисел, то есть не возникнет проблемы, когда 3 меньше, чем 02 (что могло бы произойти при сравнении как строк).


К сожалению, от поломки любимого лэптопа или смартфона не застрахован никто, а учитывая, что эти маленькие электронные девайсы очень плотно засели в нашей жизни, при их поломке многие впадают в панику и испытывают большой стресс. Но не нужно паниковать! Достаточно просто отнести или отправить сломанный девайс профессионалам, которые быстро и качественно исправят поломку и вернут вам вашего любимца. Поэтому рекомендую проверенный сервисный центр


Также рекомендуем: