Использование пользовательских метаданных в WC_Product_Query для Woocommerce 3

Я использовал стандартное wordpress Meta: meta-field-name для извлечения продуктов woocommerce на основе метаданных. Мои продукты - это треки и много мета-столбцов (например, жанр, инструмент, настроение и т. Д.). Используя WC_Product_Query, я могу создать meta_query на основе ввода пользователем из формы, которая ищет продукты, соответствующие требованиям мета. Все это отлично работает.

Теперь я хочу использовать wp_get_products вместо wp_postmeta, потому что это новый способ получения продуктов и должен быть более надежным, чем старый. Однако я не могу понять, как передать meta_query в эту функцию. В github было объявлено, что wc_get_products будет поддерживать мета с версии 2.8. Единственная информация, которую я могу найти по этому поводу, находится по следующей ссылке: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-_volume (последний абзац).

Я попытался передать meta_query в виде массива массивов, каждый из которых содержит 3 пары ключ-значение для ключа, значения и meta_key, как в WP_Query. Я также попытался добавить meta as compare, который является именем фактических полей, только само имя без префикса meta и некоторых других разновидностей. Однако ни один из этих методов не работает. Может ли кто-нибудь сказать мне, поддерживает ли эта «поддержка настраиваемых параметров» только пользовательские параметры, отличные от мета-полей, или я делаю что-то неправильно?

php,wordpress,woocommerce,metadata,product,

2

Ответов: 1


1 принят

Чтобы обрабатывать пользовательские метаданные продукта в WC_Product_Query (находящемся в таблице)add_filter( 'woocommerce_product_data_store_cpt_get_products_query', 'handling_custom_meta_query_keys', 10, 3 ); function handling_custom_meta_query_keys( $wp_query_args, $query_vars, $data_store_cpt ) { $meta_key = '_volume'; // The custom meta_key if ( ! empty( $query_vars[$meta_key] ) ) { $wp_query_args['meta_query'][] = array( 'key' => $meta_key, 'value' => esc_attr( $query_vars[$meta_key] ), 'compare' => '>', // <=== Here you can set other comparison arguments ); } return $wp_query_args; } , он прост и работает, как объясняется в последнем абзаце соответствующей документации .

Но он не обрабатывает несколько значений и сравнительных аргументов, как в a WP_Query, если вы не устанавливаете их в функции, расширяющей meta_query.

Для настраиваемого мета-ключа продукта, как _volumeдля обработки объема, взятого продуктом в м3 (кубических метрах) , следующий код будет включать этот обычай 'compare'с конкретным compareаргументом «больше, чем» :

'0.2'

Код идет в файле function.php активной дочерней темы (или активной темы).

Теперь вы просто сделаете свой запрос на этот настраиваемый мета-ключ на основе конкретного аргумента, чтобы получить все продукты с большим объемом, чем :$queried_products = wc_get_products( array( '_volume' => '0.2' ) );WP_QueryWPDB

WC_Product_Query

Протестировано и работает.

Как вы можете видеть, вы можете продолжать использоватьWP_Query столько разработчиков Woocommerce, которые все еще выполняют или даже SQL-запросы через WordPress WC_Order_queryClassa € |

Объявленная революция вокруг этого не скоро появится, и я полагаю, что они будут расширяться WC_Product_Queryи, WP_Queryкак WP_Queryи многие другие возможности и возможности.

PHP, WordPress, WooCommerce, метаданные, продукт,
Похожие вопросы
Яндекс.Метрика