如何在WooCommerce中按帖子ID对类别中的产品进行排序?

时间:2019-08-13 16:16:40

标签: php wordpress woocommerce hook-woocommerce

在商店中,某些产品属于多个类别。这使默认的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。

关于如何按类别决定我自己的产品订单的任何想法?

1 个答案:

答案 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 。此功能也与您引用的文件位于同一文件中。您可以在那里查看它的工作原理。