Как в WordPress сделать фильтрацию произвольных записей по нескольким произвольным полям одновременно?

В WordPress для фильтрации произвольных записей по нескольким произвольным полям одновременно можно использовать функции WP_Query и meta_query.

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

Для примера рассмотрим ситуацию, когда у нас есть произвольный тип записей books с произвольными полями author (автор книги) и genre (жанр книги). Нам нужно отобразить все книги, у которых автор - "John" и жанр - "Fantasy".

Первым шагом нужно создать запрос с помощью функции WP_Query. В этом запросе мы указываем тип записей books и параметр meta_query с условиями фильтрации:

$args = array(
  'post_type' => 'books',
  'meta_query' => array(
    'relation' => 'AND',
    array(
      'key' => 'author',
      'value' => 'John',
      'compare' => '='
    ),
    array(
      'key' => 'genre',
      'value' => 'Fantasy',
      'compare' => '='
    )
  )
);
$query = new WP_Query( $args );

Здесь мы использовали параметр relation со значением AND, чтобы указать, что оба условия фильтрации должны быть выполнены одновременно. Затем мы создали два элемента в массиве meta_query, каждый из которых представляет условие фильтрации для одного произвольного поля. Для каждого элемента мы указали ключ (key) — название произвольного поля, значение (value) — значение, с которым нужно сравнить поле, и оператор сравнения (compare), который в данном случае равен =.

После создания запроса можно выполнить его и получить результаты:

if ( $query->have_posts() ) {
  while ( $query->have_posts() ) {
    $query->the_post();
    // Выводим содержимое записи
  }
  wp_reset_postdata();
} else {
  // Выводим сообщение о том, что записей не найдено
  echo 'Записей не найдено';
}

В этом примере мы используем цикл while для обхода всех найденных записей и функцию the_post() для установки контекста текущей записи. Внутри цикла можно выводить содержимое каждой записи или делать с ней нужные операции. После цикла мы вызываем функцию wp_reset_postdata() для сброса контекста записи.

Таким образом, с помощью функций WP_Query и meta_query в WordPress можно легко реализовать фильтрацию произвольных записей по нескольким произвольным полям одновременно.