Как использовать wp_query для фильтрации по одному полю и сортировки по другому?

Как можно получить посты типа "events" с учётом нескольких условий, таких как дата мероприятия и закреплённый статус, с использованием REST API WordPress?
  • 1 апреля 2024 г. 12:59
Ответы на вопрос 2
Для использования `WP_Query` для фильтрации по одному полю и сортировки по другому, вы можете передать параметры `meta_key` и `orderby` в аргументы запроса.

Пример использования `WP_Query` для фильтрации по полю `meta_key` (например, 'event_date') и сортировки по полю `orderby` (например, 'post_title'):

```php
$args = array(
    'post_type' => 'events',
    'meta_key' => 'event_date',
    'orderby' => 'title',
    'order' => 'ASC'
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // Ваш код для отображения постов
    }
} else {
    // Если нет постов
}

wp_reset_postdata();
```

Для получения постов типа "events" с учётом нескольких условий, таких как дата мероприятия и закреплённый статус, с использованием REST API WordPress, вы можете создать кастомный маршрут и обработчик, который будет фильтровать посты согласно заданным критериям.

Пример создания кастомного маршрута для REST API:

```php
add_action( 'rest_api_init', function () {
    register_rest_route( 'custom/v1', '/events/(?P<date>\d{4}-\d{2}-\d{2})/(?P<status>\d+)/', array(
        'methods' => 'GET',
        'callback' => 'get_filtered_events',
    ) );
} );

function get_filtered_events( $data ) {
    $date = $data['date'];
    $status = $data['status'];

    $args = array(
        'post_type' => 'events',
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => 'event_date',
                'value' => $date,
                'compare' => '='
            ),
            array(
                'key' => 'event_status',
                'value' => $status,
                'compare' => '='
            )
        )
    );

    $query = new WP_Query( $args );

    $posts = $query->posts;

    return rest_ensure_response( $posts );
}
```

Обратите внимание, что в примере используются заглушки для даты и статуса фильтрации, вы можете адаптировать код под свои конкретные требования.
Во первых у вас повторяются ключи в аргументах wp query 
Второе - вы уверены что ваш код располагается где надо ?
Отображается три потому что у трех других вероятно отсутствует мета featured. Вам надо compare exists
Похожие вопросы