Wooocommerce 在商店和档案馆内订购“优先销售”产品

问题描述 投票:0回答:2

我需要首先设置“特价”产品来更改默认的 woocommerce 过滤器。循环中还必须包含非促销商品,但所有商品均首先按促销商品排序。

我尝试使用pre_get_posts,但我找到了仅过滤产品的方法(例如仅显示在售产品),而不是重新订购

wordpress woocommerce
2个回答
1
投票

我解决了问题,这里是解决方案,希望对其他人有用。

  /**
 * @param $q
 * Reorder products on sale first on default shop filter.
 *
 * @return void
 */
function evolve_on_sale_reorder_query( $q ) {
    $meta_query = $q->get( 'meta_query' );

    if ( ! isset( $_GET['orderby'] ) ) {
        $meta_query = array(
            'relation' => 'OR',
            array(
                'key'     => '_sale_price',
                'compare' => 'NOT EXISTS'
            ),
            array(
                'relation' => 'OR',
                array(
                    'key'     => '_sale_price',
                    'value'   => '',
                    'compare' => "="
                    // 'value'=>array(''),
                    // 'compare' => 'IN'
                ),
                array(
                    'key'     => '_sale_price',
                    'value'   => 0,
                    'compare' => '>=',
                    'type'    => 'numeric',
                )
            ),
        );

        $q->set( 'orderby', array( 'meta_value' => 'DESC', 'title' => 'ASC' ) );
    }

    $q->set( 'meta_query', $meta_query );


}

add_action( 'woocommerce_product_query', 'evolve_on_sale_reorder_query' );

1
投票

_sale_price 元键不适用于可变产品。

对于您可以使用的所有产品

add_filter('posts_orderby', function(){
  return 'FIELD(ID, '.implode(', ', wc_get_product_ids_on_sale()).') DESC';
});
© www.soinside.com 2019 - 2024. All rights reserved.