Почему оператор запроса таксономии не имеет «LIKE» в Wordpress? - PullRequest
0 голосов
/ 27 ноября 2018

Я пользуюсь woocommerce.Короче говоря, мне нужно найти продукты, в которых атрибуты value value должны быть равны 100 LIKE.Таким образом, он должен найти такие термины, как: 100/104, 100/99.

My URL search: domain.com/?pa_boltpcd=100

Итак, у меня есть атрибут (pa_boltpcd), который является таксономией.Эта таксономия (pa_boltpcd) имеет термины:

100
100/104
100/99 

В настоящее время она показывает только те продукты, в которых значение термина равно "100".Почему нет такого оператора «лайк», который мог бы найти все эти 3 термина, выполнив поиск значения «100».

Что я пробовал:

function taxonomy_like( $q ) {

if(isset($q->query['pa_boltpcd'])){

    $tax_query = (array) $q->get( 'tax_query' );

    $termIds = get_terms([
        'name__like' => '100',
        'fields' => 'ids'
    ]);

    $tax_query[] = array(
        'taxonomy' => 'pa_boltpcd',
        'field' => 'term_id',
        'terms' => $termIds,
        'operator' => 'IN'
    );

    $q->set( 'tax_query', $tax_query );
}

}
add_action( 'woocommerce_product_query', 'taxonomy_like' );
  1. Сэтот хук сначала я ищу термины, где значение 100 с критериями «LIKE», поэтому он найдет все эти термины.

  2. Затем я собираю идентификаторы найденных терминов.

  3. После этого я создаю tax_query, где он мог бы искать по моим основанным идентификаторам.

НО проблема в том, что он возвращает тот же результат, и показывает продукты с точным значением 100 ...

Пожалуйста, дайте мне несколько советов, что делать ???Извините за плохой английский, поправьте меня, где не понятно.

1 Ответ

0 голосов
/ 27 ноября 2018

Как и в налоговом запросе, вы можете запросить массив терминов, он не обрабатывает LIKE с подстановочным знаком %, как в SQL.Надеемся, что get_terms() делает это при использовании 'name__like'

Опцию флажка атрибута продукта "Enable Archives?" необходимо отключить .

Чтобы проверить следующий код, я сначала добавил ваш атрибут продукта "boltpcd" в Woocommerce с 3 терминами 100, 100/104 и 100/99.Затем я установил атрибут в 3 разных товарах, для каждого из которых свой термин.Для меня это работает и отображает 3 продукта, добавляя ?pa_boltpcd=100 к URL магазина.

Я сделал очень небольшие изменения в вашем коде, используя аналогичный хук, предназначенный для налогового запроса:

add_filter( 'woocommerce_product_query_tax_query', 'custom_taxonomy_like', 10, 2 );
function custom_taxonomy_like( $tax_query, $query ) {
    $taxonomy = 'pa_boltpcd';

    if( ! isset($_GET[$taxonomy]) )
        return $tax_query;

    // The tax query
    $tax_query[] = array(
        'taxonomy' => $taxonomy,
        'field' => 'term_id',
        'terms' => get_terms([ // Get terms "%LIKE%"
            'name__like' => esc_attr( $_GET[$taxonomy] ),
            'fields' => 'ids',
            'taxonomy' => $taxonomy
        ])
    );

    return $tax_query;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).протестировано и работает.

Я получаю 3 продукта, каждый из которых имеет свой набор терминов для pa_boltpcd таксономии (100, 100/104 и 100/99) :

enter image description here

...