Включить значение настраиваемых полей в поиск woocommerce

Я попытался включить значение настраиваемых полей в поиск woocommerce, но у меня возникла проблема.

В Google и Stack я также видел примеры с pre_get_posts, поэтому подумал, что это хорошее направление, и сделал такой код:

function custom_search( $query ) {

    if( ! is_admin() && $query->is_main_query() ) {

        if ( $query->is_search() ) { 

            $meta_query = array(
                'key'       => 'custom_color',
                'value'     => $query->query['s'],
                'compare'   => 'LIKE'  
            );

            $query->set( 'meta_query', $meta_query );

        }

    }

}

add_action( 'pre_get_posts' , 'custom_search' );

К сожалению, это не работает. Можете вы помочь мне?


person kanlukasz    schedule 26.03.2018    source источник
comment
если я не ошибаюсь, это $query->is_search(), так как это функция.   -  person Musk    schedule 26.03.2018
comment
Да, это правда (я редактирую свой пост), но все равно не работает   -  person kanlukasz    schedule 26.03.2018
comment
Не могли бы вы указать, как вы создаете настраиваемое поле «custom_color», плагин acf?   -  person Oleg Apanovich    schedule 26.03.2018
comment
Вообще custom_color был просто примером. Мое настоящее поле — _codeproduct, и я сделал это следующим образом: pastebin.com/3Brz6Cwn   -  person kanlukasz    schedule 26.03.2018


Ответы (2)


Я вижу, что вы сделали неправильно, вот рабочий пример, который я сделал на своем собственном экземпляре.

function custom_search( $query ) {

    if( ! is_admin() && $query->is_main_query() ) {

        if ( $query->is_search() ) { 

            $meta_query = $query->get( 'meta_query' );

            $meta_query[] = array(
                'key'       => 'custom_color',
                'value'     => $query->query['s'],
                'compare'   => 'LIKE'  
            );

            $query->set( 'meta_query', $meta_query );

        }

    }

}

add_action( 'woocommerce_product_query' , 'custom_search' );

Поскольку вы используете поиск Woocommerce, woocommerce_product_query будет правильным хуком, и, чтобы быть в безопасности, сохраните существующие значения по умолчанию на $query->get( 'meta_query' );

Ссылка: WooCommerce ищет товары в ценовом диапазоне с помощью WP_Query

Спасибо, ОП, за то, что принес мне этот случай :)

person Musk    schedule 26.03.2018
comment
Большое спасибо за ответ, но этот код работает только тогда, когда я ищу пустое значение (например: ?s=&post_type=product). Это не то, что я ожидаю, или, может быть, я неправильно написал свой вопрос. Вот пример для лучшего понимания: у меня есть еще одно настраиваемое поле _codeproduct. (pastebin.com/3Brz6Cwn) Товары имеют коды (пример для одного продукта: A0099B ) Я хочу найти продукт по коду продукта. Возможно ли это с помощью этого метода? Или, может быть, я должен открыть новую тему с этой проблемой, потому что это совершенно другой случай? - person kanlukasz; 26.03.2018
comment
@Luk хорошо, просто замена custom_color на _codeproduct должна помочь, я лично попробовал с моим ценовым ключом и изменил значение сравнения на равное, и это сработало. Может быть, что-то не так со значением, с которым вы пытаетесь сравнить, или вы исключаете более сложное поведение или результат? - person Musk; 26.03.2018

Вот мой аналогичный вопрос от wordpress.stackexchange.com:

Это то, что я искал, и это правильное решение

person kanlukasz    schedule 03.06.2019