我在Woo Commerce商店中有一个名为“ j-pods”的产品类别。
目标是使页面以“便宜的j豆荚”为中心。
所以我用created的“ cheap-j-pods”创建了一个新产品类别。
在加载“便宜”变体页面时,我想更改查询以使其从原始的“ j-pods”类别中拉出所有产品,并从最低价格到最高价格进行过滤。
据我了解,“ woocommerce_product_query”操作是在执行主查询之前对其进行修补的方法。
更新:我找到了一种很好的方法来更改要拉的产品类别,但是查询的按价格排列部分无效。
这是我的代码...
add_action( 'woocommerce_product_query', function( $q ) {
$pageCat = $q->get( 'product_cat' );
if( empty($pageCat) || $pageCat !== 'cheap-j-pods') {
return;
}
// Change product category query
$q->set( 'product_cat', 'j-pods' );
// Extract existing meta query
$meta_query = $q->get( 'meta_query' );
// Add a query to arrange products by asc price
$meta_query[] = array(
'orderby' => 'meta_value_num',
'meta_key' => '_price',
'order' => 'asc'
);
//echo '<pre style="display:block">' . print_r($meta_query, true) . '</pre>';
$q->set( 'meta_query', $meta_query );
}, 900);
现在,产品将以默认顺序显示。
为什么按价格排序的产品在查询中不起作用?
非常感谢。
答案 0 :(得分:0)
我想出了一种非常整齐的方法来完成这项工作。
我的错误是将上升的价格参数应用于“元查询”数组,而期望值在数组的根部分。
下面的工作代码。
add_action( 'woocommerce_product_query', function( $q ) {
$pageCat = $q->get( 'product_cat' );
// Only fire on specific category page
if( empty($pageCat) || $pageCat !== 'cheap-j-pods') {
return;
}
// Change product category query
$q->set( 'product_cat', 'j-pods' );
// Change products to be ordered by price (lowest - highest)
$q->set( 'orderby', 'meta_value_num');
$q->set( 'meta_key', '_price');
$q->set( 'order', 'asc');
}, 900);