在 Woocommerce 中按星级 ASC 添加产品排序选项
Add products sorting option by star rating ASC in Woocommerce
我正在寻找一种按星级(升序和降序)对产品进行排序的方法。看来我需要为此创建自定义代码,因为 Woocommerce 中没有实现类似这样的代码。
$options['rating-asc']
是一段没有 work/exist 的代码,但我用它来表达我正在寻找的功能,例如 $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;
}
您的代码应该仅适用于将排序选项添加到下拉列表,但如果您希望它生效,您需要通过向目录添加正确的参数将其 link 到元键或其他内容产品查询如下:
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;
}
首先,您需要在 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 文件。已测试并有效。
相关:
我正在寻找一种按星级(升序和降序)对产品进行排序的方法。看来我需要为此创建自定义代码,因为 Woocommerce 中没有实现类似这样的代码。
$options['rating-asc']
是一段没有 work/exist 的代码,但我用它来表达我正在寻找的功能,例如 $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;
}
您的代码应该仅适用于将排序选项添加到下拉列表,但如果您希望它生效,您需要通过向目录添加正确的参数将其 link 到元键或其他内容产品查询如下:
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;
}
首先,您需要在 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 文件。已测试并有效。
相关: