为了账号安全,请及时绑定邮箱和手机立即绑定

在 Woocommerce 中添加按星级 ASC 排序的产品选项

在 Woocommerce 中添加按星级 ASC 排序的产品选项

PHP
慕容708150 2023-07-30 11:11:27
我正在寻找一种按星级(升序和降序)对产品进行排序的方法。看来我需要为此创建一个自定义代码,因为 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; }
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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


由于存在排序选项“按平均评级排序”,如果您希望按“评级”键对产品进行排序的默认现有参数,您将拥有该数组:


$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 文件中。经过测试并有效。

https://img1.sycdn.imooc.com//64c5d5470001b00104030259.jpg

查看完整回答
反对 回复 2023-07-30
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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


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;

 }


查看完整回答
反对 回复 2023-07-30
  • 2 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信