Для обработки продукта пользовательских метаданных в WC_Product_Query
(находится в таблице wp_postmeta
) , это довольно просто и работает, , как объяснено в самом последнем пункт соответствующей документации .
Но он не обрабатывает несколько значений и аргументов сравнения, как в WP_Query
, , если вы не установите их в функции, расширяющей meta_query.
Для пользовательского продукта мета-ключ , например _volume
для обработки объем , полученный продуктом в м3 (куб. М) , следующий код включит этот пользовательский meta_key
с определенным compare
аргументом "больше, чем" :
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;
}
Код помещается в файл function.php активной дочерней темы (или активной темы).
Теперь вы просто сделаете запрос по этому пользовательскому мета-ключу _volume
, основанному на определенном аргументе 'compare'
, чтобы получить все продукты, объем которых превышает '0.2'
:
$queried_products = wc_get_products( array( '_volume' => '0.2' ) );
Проверено и работает.
Как видите, вы можете продолжать использовать WP_Query
, так как многие разработчики Woocommerce все еще делают или даже запросы SQL через WordPress WPDB
Class…
Объявленная революция вокруг этого не скоро произойдет, и я предполагаю, что они расширят WC_Product_Query
и WC_Order_query
, как WP_Query
, с гораздо большим количеством функций и возможностей.