Как создать пользовательский поиск полей в WordPress - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно создать собственный расширенный поиск для моего wp-сайта.Я должен показать результаты поиска в cpt (search-home.php).В моей форме много полей, содержащих разные мета значения.Я знаю, что должен использовать pre_get_posts, но я не могу использовать это хорошо.Данные полей формы отправляются методом get, и мне нужно отфильтровать wp-запрос, используя pre_get_posts, но не все поля обязательны для заполнения, поэтому они могут не отправляться.

$query->set( 'meta_query', array(
    'relation' => 'OR',
    array(
        'key' => 'name', 
        'value' => $_GET['name']
    ),
    array(
        'key' => 'family', 
        'value' => $_GET['family']

    )
) );

Во-первых, мне нужно отфильтровать pre_get_posts в моем CPT (search-home.php страница).Во-вторых, мне нужно отфильтровать запрос wp по значениям $_GET.Проблема в том, что когда значение не отправляется методом get в URL (например, в семействе), wp-запрос возвращает нулевые значения, в то время как мне нужно показать сообщение по вышедшей мета (например, по имени), количество полей велико, потому чтоиз этого я не могу использовать isset для проверки значений.Пожалуйста, помогите мне спасибо.

1 Ответ

0 голосов
/ 23 февраля 2019

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

Вы можете позаботиться о пропущенных полях без отдельной строки isset в каждом поле.Смотрите ниже: Создайте массив ВСЕХ имен полей:

$field_names = array('family', 'name', 'country');
$meta_query = array('relation' => 'OR');
foreach ($field_names as $field_name) {
  if (isset($_GET[$field_name])) { 
    $meta_query[] = array('key' => $field_name, 'value' => $_GET[$field_name]);
  }
}

$args = array(
    'meta_query' => $meta_query,
);
$query = new WP_Query( $args );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...