在 Woocommerce 3 的 WC_Product_Query 中使用自定义元数据
Use custom meta data in a WC_Product_Query on Woocommerce 3
我曾经使用标准的 wordpress WP_Query 来获取基于元数据的 woocommerce 产品。我的产品是曲目,有很多元列(如流派、乐器、情绪等)。使用 WP_Query 我可以根据用户从表单输入的内容创建一个 meta_query,用于搜索满足元要求的产品。所有这些都很好用。
现在我想使用 wp_get_products 而不是 WP_Query,因为这是获取产品的新方式,而且应该比旧方式更适合未来。但是,我似乎无法弄清楚如何将 meta_query 传递给该函数。 github 上宣布 wc_get_products 将支持 2.8 版的元数据。我能找到的唯一信息如下 link:https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query(最后一段)。
我尝试将 meta_query 作为数组的数组传递,每个数组包含 3 个用于键、值和比较的键值对,就像在 WP_Query 中一样。我还尝试将元添加为 Meta: meta-field-name
,这是实际字段的名称,只有名称本身没有 'meta' 前缀,以及其他一些变体。 None 这些方法虽然有效。谁能告诉我这个 'custom parameter support' 是否仅指元字段以外的自定义参数,还是我做错了什么?
处理 自定义元数据 WC_Product_Query
(位于 wp_postmeta
table),它非常简单并且有效,as explained in the very last paragraph of the related documentation。
But it doesn't handle multiple values and comparison arguments like in a WP_Query
, if you don't set them in the function that extend the meta_query.
对于定制产品元键,例如_volume
来处理产品占用的数量在 m3 (立方米) 中,以下代码将启用具有特定 compare
参数的自定义 meta_key
"bigger than":
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 文件。
现在您只需根据特定的 'compare'
参数对该自定义 _volume
元键进行查询,然后 get体积大于 '0.2'
的所有产品:
$queried_products = wc_get_products( array( '_volume' => '0.2' ) );
已测试并有效。
As you can see, you can continue using a WP_Query
as many Woocommerce developers still do or even SQL queries through WordPress WPDB
Class…
The announced revolution around this is not going to come soon and I suppose that they will extend WC_Product_Query
and WC_Order_query
like WP_Query
with many more features and possibilities.
您可以添加这个小功能来解决所有问题:
add_filter( 'woocommerce_product_data_store_cpt_get_products_query', static function($wp_query_args, $query_vars, $data_store_cpt){
if ( ! empty( $query_vars['meta_query'] ) ) {$wp_query_args['meta_query'][] = $query_vars['meta_query'];}
return $wp_query_args;
}, 10, 3 );
现在只需将 meta_query 传递给 wc_get_products,它就支持它:)。
他们可能应该雇用我哈哈。
我曾经使用标准的 wordpress WP_Query 来获取基于元数据的 woocommerce 产品。我的产品是曲目,有很多元列(如流派、乐器、情绪等)。使用 WP_Query 我可以根据用户从表单输入的内容创建一个 meta_query,用于搜索满足元要求的产品。所有这些都很好用。
现在我想使用 wp_get_products 而不是 WP_Query,因为这是获取产品的新方式,而且应该比旧方式更适合未来。但是,我似乎无法弄清楚如何将 meta_query 传递给该函数。 github 上宣布 wc_get_products 将支持 2.8 版的元数据。我能找到的唯一信息如下 link:https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query(最后一段)。
我尝试将 meta_query 作为数组的数组传递,每个数组包含 3 个用于键、值和比较的键值对,就像在 WP_Query 中一样。我还尝试将元添加为 Meta: meta-field-name
,这是实际字段的名称,只有名称本身没有 'meta' 前缀,以及其他一些变体。 None 这些方法虽然有效。谁能告诉我这个 'custom parameter support' 是否仅指元字段以外的自定义参数,还是我做错了什么?
处理 自定义元数据 WC_Product_Query
(位于 wp_postmeta
table),它非常简单并且有效,as explained in the very last paragraph of the related documentation。
But it doesn't handle multiple values and comparison arguments like in a
WP_Query
, if you don't set them in the function that extend the meta_query.
对于定制产品元键,例如_volume
来处理产品占用的数量在 m3 (立方米) 中,以下代码将启用具有特定 compare
参数的自定义 meta_key
"bigger than":
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 文件。
现在您只需根据特定的 'compare'
参数对该自定义 _volume
元键进行查询,然后 get体积大于 '0.2'
的所有产品:
$queried_products = wc_get_products( array( '_volume' => '0.2' ) );
已测试并有效。
As you can see, you can continue using a
WP_Query
as many Woocommerce developers still do or even SQL queries through WordPressWPDB
Class…The announced revolution around this is not going to come soon and I suppose that they will extend
WC_Product_Query
andWC_Order_query
likeWP_Query
with many more features and possibilities.
您可以添加这个小功能来解决所有问题:
add_filter( 'woocommerce_product_data_store_cpt_get_products_query', static function($wp_query_args, $query_vars, $data_store_cpt){
if ( ! empty( $query_vars['meta_query'] ) ) {$wp_query_args['meta_query'][] = $query_vars['meta_query'];}
return $wp_query_args;
}, 10, 3 );
现在只需将 meta_query 传递给 wc_get_products,它就支持它:)。 他们可能应该雇用我哈哈。