简体   繁体   English

按库存和价格排序产品 woocommerce

[英]Sort products by stock and price woocommerce

I want to create a new sorting on Woo which sort like this:我想在 Woo 上创建一个新的排序,排序如下:

Product 1: stock_status => instock, price => 10;产品1:stock_status => instock, price => 10;
Product 2: stock_status => outofstock, price => 20;产品2:stock_status => outofstock, price => 20;
Product 3: stock_status => outofstock, price => 30;产品3:stock_status => outofstock, price => 30;
Product 4: stock_status => instock, price => 40;产品4:stock_status => instock, price => 40;

New sorting result:新的排序结果:

Product 1: stock_status => instock, price => 10;产品1:stock_status => instock, price => 10;
Product 4: stock_status => instock, price => 40;产品4:stock_status => instock, price => 40;
Product 2: stock_status => outofstock, price => 20;产品2:stock_status => outofstock, price => 20;
Product 3: stock_status => outofstock, price => 30;产品3:stock_status => outofstock, price => 30;

First by stock and then by price.首先按库存,然后按价格。 I have this working but I don't know how to continue:我有这个工作,但我不知道如何继续:

add_filter( 'woocommerce_catalog_orderby', 'misha_add_custom_sorting_options' );

function misha_add_custom_sorting_options( $options ){

    $options['in-stock'] = 'Show products in stock first';

    return $options;

}

add_filter( 'woocommerce_get_catalog_ordering_args', 'misha_custom_product_sorting' );

function misha_custom_product_sorting( $args ) {

    // Show products in stock first
    if( isset( $_GET['orderby'] ) && 'in-stock' === $_GET['orderby'] ) {
        $args['meta_key'] = '_stock_status';
        $args['orderby'] = array( 'meta_value' => 'ASC' );
    }

    return $args;

}

Any help will be appreciate it.任何帮助将不胜感激。

You should try this for Sort by stock in DESC order.您应该尝试按 DESC 顺序按库存排序。

  // Apply Sort By In Stock
  add_filter( 'woocommerce_get_catalog_ordering_args', 'woo_add_postmeta_ordering_args' );
  function woo_add_postmeta_ordering_args( $args_sort ) {

    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : '';

    switch( $orderby_value ) {
    case 'in-stock':
        $args_sort['orderby']  = '_stock_status';
        $args_sort['order']    = 'ASC';
    break;
    }
    return $args_sort;
  }

  // Add "Sort By In Stock" option in dropdown
  add_filter( 'woocommerce_default_catalog_orderby_options', 'woo_add_new_postmeta_orderby' );
  add_filter( 'woocommerce_catalog_orderby', 'woo_add_new_postmeta_orderby' );

  function woo_add_new_postmeta_orderby( $sortby ) {
      $sortby['in-stock'] = __( 'Sort By In Stock', 'woocommerce' );
      return $sortby;
  }

For more detail you should this question/answer - https://stackoverflow.com/a/69052764/16560548有关更多详细信息,您应该这个问题/答案 - https://stackoverflow.com/a/69052764/16560548

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM