Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Woocommerce中添加按星级ASC排序的产品选项_Php_Wordpress_Sorting_Woocommerce_Product - Fatal编程技术网

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

Php 在Woocommerce中添加按星级ASC排序的产品选项,php,wordpress,sorting,woocommerce,product,Php,Wordpress,Sorting,Woocommerce,Product,我正在寻找一种按星级(asc和desc)对产品进行排序的方法。似乎我需要为此创建一个自定义代码,因为Woocommerce中没有实现像这样的东西 $options['rating-asc']是一段不起作用/不存在的代码,但我用它来表达我想要的函数,比如$options['title-desc'] add_filter( 'woocommerce_catalog_orderby', 'rory_add_custom_sorting_options' ); function rory_add_cu

我正在寻找一种按星级(asc和desc)对产品进行排序的方法。似乎我需要为此创建一个自定义代码,因为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;
 
}

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

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;
 }

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

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\u get\u catalog\u ordering\u args
hook的自定义函数中定义
'rating-asc'
排序选项参数

由于排序选项“按平均评级排序”存在,如果您查找按“评级”键对产品进行排序的默认现有参数,那么您就有了该数组:

$args = array(
    'orderby' => array(
        'meta_value_num' => 'DESC',
         'ID' => 'ASC'
    ),
    'order' => 'ASC',
    'meta_key' => '_wc_average_rating'
);
因此,您只需将
'meta\u value\u num'=>'DESC'
更改为
'meta\u value\u 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文件。测试和工作

相关的:


首先,您需要在一个自定义函数中定义
'rating-asc'
排序选项参数,该函数连接在
woocommerce\u get\u catalog\u ordering\u args
hook中

由于排序选项“按平均评级排序”存在,如果您查找按“评级”键对产品进行排序的默认现有参数,那么您就有了该数组:

$args = array(
    'orderby' => array(
        'meta_value_num' => 'DESC',
         'ID' => 'ASC'
    ),
    'order' => 'ASC',
    'meta_key' => '_wc_average_rating'
);
因此,您只需将
'meta\u value\u num'=>'DESC'
更改为
'meta\u value\u 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文件。测试和工作

相关的: