Не могу получить свой пользовательский результат поиска, используя meta_query и tax_query вместе?

Вопрос или проблема

Я создал пользовательский поиск, где я могу отображать поля (поля ACF), а также таксономии. Но когда я ищу, используя комбинацию таксономий и мета-полей, я не получаю результатов. Результаты появляются, если я ищу либо таксономии, либо мета-поля. Как сделать так, чтобы оба условия работали вместе?

Это мой код, где я указал и meta_query, и tax_query:-

<?php
if($_POST){
    $_speciality = $_POST['speciality'] != '' ? $_POST['speciality'] : '';
    $_students_last_name = $_POST['students_last_name'] != '' ? $_POST['students_last_name'] : '';

    if($_speciality!=" "){
        $param1 = array(
            'key' => 'speciality',
            'compare' => '=',
            'value' => $_speciality
        );
    } else{
        $param1 = "";
    }

    if($_students_last_name!=" "){
        $param2=array(
            'key'       => 'students_last_name',
            'compare'   => 'LIKE',
            'value'     => $_students_last_name
        );
    } else{
        $param2="";
    }

    $args = array(
        'post_type' => 'students',
        'orderby'   => 'date',
        'order'     => 'DESC',
        'tax_query' => array(
            array(
                'taxonomy'  => 'Music',
                'field'     => 'slug',
                'terms'     => $param1
            )
        ),
        'meta_query' => array(
            'relation' => 'AND',
            $param2
        ),      
    );

} else {
    $args = array(
        'post_type' => 'students',
        'orderby' => 'date',
        'order' => 'DESC'
    );
}

$the_query = new WP_Query( $args );

Выглядит как распространенная проблема: meta_query и tax_query вместе = ошибка. Смотрите, у меня та же проблема, и я указал две ссылки (возможные решения для вас) в своем вопросе (Комбинирование tax_query и meta_query в WP_Query). Может быть, вы можете использовать/обработать что-то из этого? Если да, возможно, это ваше решение.

.

Ответ или решение

Для решения проблемы с комбинацией meta_query и tax_query в вашем кастомном поиске на WordPress, необходимо внимательно рассмотреть настройки и синтаксис вашего кода запроса WP_Query. В текущем коде могут быть некоторые ошибки, которые мешают вам получить корректные результаты. Давайте разберемся, как правильно настроить запрос.

Актуальные Ошибки:

  1. Неправильный параметр terms в tax_query:
    Вы используете $param1, который предназначен для meta_query, вместо передачи фактических значений для термина таксономии. Параметр terms должен содержать значения таксономии (например, слаг категории).

  2. Параметры meta_query и tax_query:
    Нужно убедиться, что массивы meta_query и tax_query правильно настроены и содержат необходимые значения для выполнения поиска. В вашем случае, проверьте корректность использования условий и значений.

  3. Отсутствие проверки существования параметров:
    Прежде чем добавлять параметры в массивы запросов, нужно убедиться, что они действительно существуют и не являются пустыми строками или пробелами.

Исправленный Код:

<?php
if ($_POST) {
    $_speciality = isset($_POST['speciality']) ? $_POST['speciality'] : '';
    $_students_last_name = isset($_POST['students_last_name']) ? $_POST['students_last_name'] : '';

    $meta_queries = array('relation' => 'AND');
    $tax_queries = array();

    if ($_students_last_name !== "") {
        $meta_queries[] = array(
            'key'     => 'students_last_name',
            'compare' => 'LIKE',
            'value'   => $_students_last_name,
        );
    }

    if ($_speciality !== "") {
        $tax_queries[] = array(
            'taxonomy' => 'Music',
            'field'    => 'slug',
            'terms'    => $_speciality,
        );
    }

    $args = array(
        'post_type'  => 'students',
        'orderby'    => 'date',
        'order'      => 'DESC',
        'meta_query' => $meta_queries,
    );

    // Присоединяем tax_query, только если есть условия
    if (!empty($tax_queries)) {
        $args['tax_query'] = $tax_queries;
    }
} else {
    $args = array(
        'post_type' => 'students',
        'orderby'   => 'date',
        'order'     => 'DESC',
    );
}

$the_query = new WP_Query($args);

Пояснения:

  • isset для проверки данных из $_POST: Это гарантирует, что переменные будут существовать, и позволяет корректно обрабатывать отсутствие данных.

  • Операция AND для meta_query: Позволяет указать, что все условия должны быть выполнены одновременно.

  • Условное добавление tax_query: Используется только если таксономии существуют, что уменьшает вероятность ошибок в запросе.

Рекомендации:

  1. Проверка работы запросов: Делайте var_dump($args); перед вызовом WP_Query для отладки, чтобы видеть, какие параметры передаются в запрос.

  2. Объединение условий: Убедитесь, что ваши логические операторы и структуры данных правильно отражают ваши намерения (например, используйте relation для указания соединения условий).

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

Оцените материал
Добавить комментарий

Капча загружается...