【问题标题】:Add products sorting option by star rating ASC in Woocommerce在 Woocommerce 中按星级 ASC 添加产品排序选项
【发布时间】:2020-11-01 19:47:17
【问题描述】:

我正在寻找一种按星级(升序和降序)对产品进行排序的方法。看来我需要为此创建一个自定义代码,因为像这样的东西在 Woocommerce 中没有实现。

$options['rating-asc'] 是一段不起作用/不存在的代码,但我用它来表达我正在寻找的功能,例如 $options['title-desc']

add_filter( 'woocommerce_catalog_orderby', 'rory_add_custom_sorting_options' );

function rory_add_custom_sorting_options( $options ){
    $options['rating-asc'] = 'Rating (Asc)';
    return $options;
 
}

【问题讨论】:

    标签: php wordpress sorting woocommerce product


    【解决方案1】:

    首先,您需要在 woocommerce_get_catalog_ordering_args 挂钩中挂钩的自定义函数中定义 'rating-asc' 排序选项参数。

    由于存在排序选项“按平均评分排序”,如果您查看默认现有参数以按“评分”键对产品进行排序,则您拥有该数组:

    $args = array(
        'orderby' => array(
            'meta_value_num' => 'DESC',
             'ID' => 'ASC'
        ),
        'order' => 'ASC',
        'meta_key' => '_wc_average_rating'
    );
    

    所以您只需将'meta_value_num' => 'DESC' 更改为'meta_value_num' => 'ASC',那么您正确的工作代码将是:

    add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_catalog_ordering_by_ratings' );
    function enable_catalog_ordering_by_ratings( $args ) {
        if ( isset( $_GET['orderby'] ) && 'rating-asc' === $_GET['orderby']
        && isset($args['orderby']['meta_value_num']) ) {
           $args['orderby']['meta_value_num'] = 'ASC';
        }
        return $args;
    }
    

    现在您可以在 “按平均评分排序” 现有选项之后插入新的排序选项,例如:

    add_filter( 'woocommerce_catalog_orderby', 'catalog_orderby_ratings_asc_filter' );
    function catalog_orderby_ratings_asc_filter( $options ){
        $sorted_options =[];
    
        foreach( $options as $key => $label ){
            if( 'rating' === $key ) {
                $sorted_options['rating'] = $options['rating'] . ' ' . __('(Desc)', 'woocommerce');
                $sorted_options['rating-asc'] = $options['rating'] . ' ' . __('(Asc)', 'woocommerce');
            } else {
                $sorted_options[$key] = $label;
            }
        }
    
        return $sorted_options;
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    相关:

    【讨论】:

      【解决方案2】:

      您的代码应该仅适用于将排序选项添加到下拉列表,但如果您希望它生效,您需要通过向目录产品查询添加正确的参数来将其链接到元键或其他内容:

      add_filter( 'woocommerce_get_catalog_ordering_args', 'rory_custom_sorting_args' );
       
      function rory_custom_sorting_args( $args ) {
       
          if( isset( $_GET['orderby'] ) && 'rating-asc' === $_GET['orderby'] ) {
              $args['meta_key'] = 'rating-asc'; // Replace this with the meta key you want to use for ordering products
              $args['orderby'] = array( 'meta_value' => 'ASC' );
          }
       
          return $args;
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-02
        • 2019-05-03
        • 1970-01-01
        • 2021-02-19
        • 2019-04-20
        • 1970-01-01
        • 2021-11-06
        • 2018-11-28
        相关资源
        最近更新 更多