@Riba0017

Как отсортировать записи Wordpress одновременно по времени создания и по произвольному полю AFC?

Доброго дня!
Возник вопрос с сортировкой записей ОДНОВРЕМЕННО по двум значениям.
У меня есть список записей, у каждой есть свое значение "важности" (выставляется руками в произвольное поле sorting, созданное плагином Advanced Custom Fields (ACF)). Нужно отсортировать записи по этим значениям от 1 до 100, причем если значения одинаковы, выставлять их по дате и времени создания.
Нашла пример, как сделать сортировку по произвольному полю и она сработала, но записи с одинаковой важностью при обновлении страницы рандомно меняют свое положение.
add_action('pre_get_posts', 'my_pre_get_posts', 10, 1);

function my_pre_get_posts($query) {

    if ($query->is_main_query() && !is_admin()) { 
        $query->set('meta_key', 'sorting'); // сортировка по произвольному полю
        $query->set('orderby', 'meta_value_num');
        $query->set('order', 'ASC'); // порядок сортировки
    }
    $query->set('meta_query', $meta_query);
}

А как прикрутить к этому еще и сортировку по дате и времени - не понимаю(
Буду признательна за помощь!
  • Вопрос задан
  • 884 просмотра
Решения вопроса 1
@Riba0017 Автор вопроса
Спасибо, советы помогли. Получился монстр, пожалуй, но работающий как надо) Правда теперь придется взламывать пагинацию)) но это уже другая история.
По итогу пришлось ввести еще два произвольных поля для даты и времени, в которые будут заносится данные в момент создания или редактирования статей. И уже между тремя полями просходит сортировка и сравнение.
вот что получилось, может кому пригодится:
function postSorting() {
    $todays_date = current_time('Ymd');
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => '4',
        'paged' => $paged,
        'meta_query' => array(
            'relation' => 'AND',
            'sorting_clause' => array(
                'key' => 'sorting',
                'type' => 'numeric',
                'value' => array(0, 100),
                'compare' => 'BETWEEN',
                
            ),
            'date' => array(
                'date_clause' => array(
                    'key' => 'date',
                    'compare' => '<=',
                    'value' => $todays_date,
                ),
                'time_clause' => array(
                    'key' => 'time',
                    'compare' => 'EXISTS',
                ),
            )
        ),
        'orderby' => array(
            'sorting_clause' => 'ASC',
            'date_clause' => 'ASC',
            'time_clause' => 'ASC',
        ),
    );
 
    $query = new WP_Query( $args );

    //вывод цикла...

    // сброс
    wp_reset_postdata();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Chefranov
@Chefranov
Новичок
Ответ написан
Комментировать
Kozack
@Kozack Куратор тега WordPress
Thinking about a11y
https://wp-kama.ru/function/wp_query#orderby — подробно иизучите все примеры

#6 Множественная сортировка с использованием массива (с версии 4.0)
Получим страницы отсортированные по заголовку (title) и номеру меню (menu_order) в разном порядке (ASC/DESC):

$query = new WP_Query( array( 'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' ) ) );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы