Как реализовать поиск с фильтром wordpress + acf?

Для реализации поиска с фильтром в WordPress с использованием плагина Advanced Custom Fields (ACF) необходимо выполнить несколько шагов. Вот подробная инструкция:

1. Установите и активируйте плагин ACF на своем сайте WordPress. После активации плагин добавит новое меню "Поля" в боковую панель администратора.

2. Создайте группу полей для поиска. В меню "Поля" нажмите на кнопку "Добавить новую" и создайте новую группу полей. В этой группе полей вы можете определить необходимые поля для фильтрации, такие как текстовые поля, выпадающие списки и т. д. Обязательно задайте уникальное имя группе полей и выберите "Все" (или конкретные) типы записей где вы хотите использовать эту группу.

3. Для каждого поля в группе полей задайте метапараметры. Вы можете определить название поля, тип поля (текстовое поле, выпадающий список, и т. д.), варианты выбора и т. п. Эти параметры будут использоваться при фильтрации поиска.

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

<form action="<?php echo site_url('/'); ?>" method="get" id="searchform">
   <input type="text" name="s" id="s" placeholder="Введите ключевое слово" />
   <?php
   $fields = get_field_objects( 'your_field_group' );
   foreach ( $fields as $field_name => $field ) {
       echo '<select name="' . $field_name . '">';
       echo '<option value="">' . $field['label'] . '</option>';
       echo '<option value="option_1">' . $field['option_1'] . '</option>';
       // Добавьте другие варианты
       echo '</select>';
   }
   ?>
   <button type="submit">Найти</button>
</form>

В этом коде мы создаем форму поиска с текстовым полем (name="s") для ключевого слова и выпадающим списком (name="your_field_name") для каждого поля из вашей группы полей. Замените 'your_field_group' на имя вашей группы полей и добавьте необходимые варианты для каждого выпадающего списка.

5. Добавьте фильтрацию поиска в функции фильтрации запросов. Этот код следует добавить в файл functions.php вашей активной темы:

function custom_search_filter($query) {
    if (!$query->is_admin && $query->is_search) {
        // Получить все поле для поиска
        $fields = get_field_objects( 'your_field_group' );
        $meta_query = array('relation' => 'AND');
        
        // Цикл по всем полям группы полей
        foreach ( $fields as $field_name => $field ) {
            if (isset($_GET[$field_name]) && !empty($_GET[$field_name])) {
                $meta_query[] = array(
                    'key' => $field_name,
                    'value' => $_GET[$field_name],
                    'compare' => 'LIKE'
                );
            }
        }
        
        // Применить мета-запрос для фильтрации
        $query->set('meta_query', $meta_query);
    }
    return $query;
}
add_filter('pre_get_posts','custom_search_filter');

В этом коде мы добавляем фильтрацию по метаданным запроса на основе переданных значений из формы поиска. Обратите внимание, что мы используем также имя вашей группы полей ('your_field_group') и группируем запросы с использованием отношения 'AND'.

Теперь у вас должен быть рабочий поиск с фильтром в вашей системе WordPress с помощью плагина Advanced Custom Fields (ACF).