在商店中,某些产品属于多个类别。这使默认的WooCommerce订购无法正常工作,因为如果一个产品在类别A中排在第一位,那么如果两个产品都属于同一类别,那么其他产品就不能在类别B中排在第一位。
我想找到一种方法,可以按我想要的特定顺序按邮编ID对商店类别中的产品进行排序(我将提供ID)。
到目前为止,我想到了:
add_filter( 'woocommerce_get_catalog_ordering_args', 'my_ordering_function', 20, 1 );
function my_ordering_function( $args ) {
$product_category = 'my-category';
if( ! is_product_category($product_category) ) return $args;
$args['post__in'] = array( 74, 116, 3565, 3563 );
$args['orderby'] = 'post__in';
$args['order'] = 'ASC';
return $args;
}
此代码可以完成这项工作,但是在检查woocommerce_get_catalog_ordering_args
source code之后,似乎什至不支持post__in。
关于如何按类别决定我自己的产品订单的任何想法?
答案 0 :(得分:1)
使用您的方法,您可以在使用woocommerce_get_catalog_ordering_args
过滤器的函数的父函数中执行此操作。
您要查找的功能是product_query
,在此功能中,您具有动作挂钩woocommerce_product_query
。对于您的用例,类似的事情会起作用。
function my_ordering_function( $q, $this ) {
$q->set( 'post__in', array( 74, 116, 3565, 3563 ) );
$q->set( 'orderby', 'post__in' );
}
add_action( 'woocommerce_product_query', 'my_ordering_function', 10, 2 );
PS 。此功能也与您引用的文件位于同一文件中。您可以在那里查看它的工作原理。