Революционный слайдер сортировка по двум пользовательским полям

Вопрос или проблема

Я создал Revolution Slider, который загружает пользовательский тип записи, События. Есть два пользовательских поля: Дата начала события и Дата окончания события. Я хотел бы вывести сортировку по дате начала и дате окончания. Потому что сейчас возможно сортировать только по дате начала, а если дата начала одинаковая, то будет сортировать по заголовку.

Вот что я нашел на сайте Revolution Slider:

https://www.themepunch.com/faq/sort-options-post-based-sliders/

function modify_slider_order($query, $slider_id) {
    if($slider_id == 4) {
        $query['meta_key'] = 'event_start_date';
        $query['orderby'] = 'event_start_date';
        $query['meta_type'] = 'DATE';
        $query['order'] = 'ASC';
    }
        return $query;
}
add_filter('revslider_get_posts', 'modify_slider_order', 10, 2);

Однако я не могу добавить массив в ‘orderby’. Согласно этому:

http://www.billerickson.net/wp-query-sort-by-meta/

'orderby'  => array(
    'event_start_date' => 'ASC',
    'event_end_date' => 'ASC',
),

Может кто-то подскажет, как изменить ‘orderby’?

Спасибо!

Чтобы отсортировать по дате окончания события или дате начала, вам нужно написать отдельные функции и вызывать их по мере необходимости. Например, если пользователь нажимает на сортировку по началу, тогда должна быть вызвана функция начала.

switch($orderby){
case: 'event-start':
# ваш код
/*
 $query['meta_key'] = 'event_start_date';
        $query['orderby'] = 'event_start_date';
*/
break;
case 'event-end':
# ваш код
/*
 $query['meta_key'] = 'event_end_date';
        $query['orderby'] = 'event_end_date';
*/
break;

}

Ответ или решение

Чтобы настроить порядок сортировки в Revolution Slider с использованием двух пользовательских полей даты (даты начала и конца события), вам потребуется модифицировать запрос к базе данных, чтобы он сортировал записи в нужном вам порядке. Это можно сделать, изменив функцию modify_slider_order, чтобы учитывать оба поля в сортировке.

Шаг 1: Изменение функции modify_slider_order

Ваша текущая функция реализует сортировку только по полю event_start_date. Чтобы добавить сортировку по обоим полям, нужно будет расширить логику функции. Ниже приведён пример кода, который демонстрирует, как можно охватить оба поля в запросе:

function modify_slider_order($query, $slider_id) {
    if($slider_id == 4) {
        // Задайте массив для сортировки
        $query['orderby'] = array(
            'event_start_date' => 'ASC',
            'event_end_date' => 'ASC',
            'title' => 'ASC' // Если требуется сортировка по заголовку для записей с одинаковыми датами
        );

        // Убедитесь, что указаны также ключи метаданных
        $query['meta_key'] = 'event_start_date'; // Это нужно для правильной выдачи результата запроса
        $query['meta_type'] = 'DATE'; // Указываем, что тип данных - дата
        $query['order'] = 'ASC';
    }

    return $query;
}
add_filter('revslider_get_posts', 'modify_slider_order', 10, 2);

Шаг 2: Обработка сортировки по запросу пользователя

Если у вас есть возможность менять сортировку по запросу пользователя (например, при нажатии на кнопки), вы можете реализовать функцию для обработки этой логики:

function dynamic_slider_order($query, $slider_id, $orderby) {
    if($slider_id == 4) {
        switch ($orderby) {
            case 'event-start':
                $query['orderby'] = 'event_start_date';
                break;
            case 'event-end':
                $query['orderby'] = 'event_end_date';
                break;
            default:
                // Порядок по умолчанию если ничего не было выбрано
                $query['orderby'] = array(
                    'event_start_date' => 'ASC',
                    'event_end_date' => 'ASC',
                );
                break;
        }
        // Общие параметры запроса
        $query['meta_key'] = 'event_start_date';
        $query['meta_type'] = 'DATE';
        $query['order'] = 'ASC';
    }
    return $query;
}
add_filter('revslider_get_posts', 'dynamic_slider_order', 10, 3);

Заключение

Теперь у вас есть два подхода: статическое и динамическое управление порядком сортировки, учитывающее два пользовательских поля. Это решение не только позволит вам контролировать порядок отображения событий, но и обеспечит гибкость для дальнейших улучшений. Не забудьте тестировать изменения в безопасной среде перед развертыванием на рабочем сайте, чтобы убедиться, что всё функционирует корректно.

Оцените материал
Добавить комментарий

Капча загружается...