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

Салам алейкум, братья! У меня нет времени на чтение мануалов и статей, поэтому прошу вашей помощи. На моем сайте уже присутствует поисковая форма. Как мне сделать так, чтобы с её помощью можно было находить посты через произвольные поля? Заранее благодарю за ответ!
  • 13 сентября 2024 г. 8:45
Ответы на вопрос 1
Валейкум ас-салам! Чтобы создать поисковую форму, которая будет искать посты по произвольным полям (custom fields) в WordPress, вам нужно выполнить несколько шагов. Вот пример, как это можно сделать:

### 1. Создайте форму поиска

Добавьте на ваш сайт форму поиска. Это можно сделать в файле `.php`, где вы хотите отобразить поиск (например, в `header.php` или отдельном шаблоне):

```php
<form method="get" action="<?php echo home_url('/'); ?>">
    <input type="text" name="s" placeholder="Поиск...">
    <input type="text" name="custom_field" placeholder="Поиск по произвольному полю">
    <input type="submit" value="Искать">
</form>
```

### 2. Измените запрос поискового запроса

Чтобы сделать поисковую форму, которая будет обрабатывать запросы по произвольным полям, вам нужно изменить основной запрос. Это можно сделать с помощью фильтра `pre_get_posts`. Добавьте следующий код в файл `functions.php` вашей темы:

```php
function custom_search_query($query) {
    if ($query->is_search && !is_admin()) {
        $custom_field_value = get_query_var('custom_field');

        if (!empty($custom_field_value)) {
            $meta_query = array(
                array(
                    'key' => 'your_custom_field_key', // замените на ваш ключ произвольного поля
                    'value' => $custom_field_value,
                    'compare' => 'LIKE'
                )
            );

            $query->set('meta_query', $meta_query);
        }
    }
}
add_action('pre_get_posts', 'custom_search_query');
```

### 3. Использование `get_query_var`

Не забудьте зарегистрировать параметр `custom_field`, чтобы он был доступен в запросе. Добавьте эту строку в ваш файл `functions.php`:

```php
function custom_query_vars_filter($vars) {
    $vars[] = "custom_field";
    return $vars;
}
add_filter('query_vars', 'custom_query_vars_filter');
```

### 4. Тестирование

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

### Замечания

- Убедитесь, что ключ `your_custom_field_key`, указанный в `meta_query`, соответствует тому, как вы сохраняете свои произвольные поля.
- Поскольку поисковая система по умолчанию может не искать в произвольных полях, вам необходимо использовать данный подход.

Теперь у вас есть работающая поисковая форма, которая также ищет по произвольным полям! Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать.
Похожие вопросы