Мы отсортируем записи в WordPress в публичной части для определенной таксономии. На базе этого примера вы сможете легко построить свою собственную логику сортировки.
Ниже приведен код, который нужно вставить в
functions.php
вашей темы:
function change_order_post_list( $query ){
if( !is_admin() && $query->is_main_query() && $query->query['taxonomy'] == 'status' ) {
$query->set('meta_key' , 'date_actual');
$query->set('orderby' , 'meta_value');
$query->set('order' , 'DESC');
}
}
add_action('pre_get_posts', 'change_order_post_list', 1 );
Немного подробностей.
Функция будет срабатывать перед тем, как движок полезет в базу данных за записями. Нам остается просто переопределить значения по-умолчанию.
В условии мы проверяем:
- Находимся ли мы в административном разделе (в
/wp-admin
); - Запрос является «главным». Например, если мы получаем записи через
get_posts()
в шаблоне — это не главный запрос. Главным будет страница, на которой мы это делаем; - Запрос вытаскивает посты из нашей собственной таксономии
status
;
Если все условия сработали, мы сортируем по значению произвольного поля
date_actual
в порядке убывания.
Если принцип работы понятен, то вы сможете легко добавить свою логику в этот пример.