wordpress 在Woocommerce中按DESC顺序排序产品

jc3wubiy  于 2023-10-17  发布在  WordPress
关注(0)|答案(6)|浏览(140)

我在我的活动主题的functions.php文件中编写了以下代码:

add_filter( 'woocommerce_get_catalog_ordering_args', 
    'custom_woocommerce_get_catalog_ordering_args' );
    function custom_woocommerce_get_catalog_ordering_args( $args ) {
     $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'random_list' == $orderby_value ) {
        $args['orderby'] = 'date';
        $args['order'] = 'desc';
        $args['meta_key'] = '';
    }
    return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
    $sortby['random_list'] = 'DESC SORT';
    return $sortby;
}

我尝试按Desc排序产品,但产品仍按默认 (ASC) 排序。
如何按DESC排序?

brc7rcf0

brc7rcf01#

您可以使用一个自定义函数挂接在**woocommerce_product_query**action hook中,如下所示:

add_action( 'woocommerce_product_query', 'default_catalog_ordering_desc', 10, 2 );
function default_catalog_ordering_desc( $q, $query ){
    if( $q->get( 'orderby' ) == 'menu_order title' )
        $q->set( 'order', 'DESC' );
}
  • 代码放在您的活动子主题(或活动主题)的functions.php文件或任何插件文件中。*

测试和作品。

wqlqzqxt

wqlqzqxt2#

你需要先决定你想按哪个字段来排序,价格,标题等。但我已经写了所有可能的方式,你可以使用它,
添加过滤器('woocommerce_get_catalog_ordering_args','custom_query_sort_args');
public function function getString(){

// Sort by and order
    $current_order = ( isset( $_SESSION['orderby'] ) ) ? $_SESSION['orderby'] : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );

    switch ( $current_order ) {
        case 'date' :
            $orderby = 'date';
            $order = 'desc';
            $meta_key = '';
        break;
        case 'price' :
            $orderby = 'meta_value_num';
            $order = 'asc';
            $meta_key = '_price';
        break;
        case 'title' :
            $orderby = 'meta_value';
            $order = 'asc';
            $meta_key = '_woocommerce_product_short_title';
        break;
        default :
            $orderby = 'menu_order title';
            $order = 'asc';
            $meta_key = '';         
        break;
    }

    $args = array();

    $args['orderby']        = $orderby;
    $args['order']          = $order;

    if ($meta_key) :
        $args['meta_key'] = $meta_key;
    endif;

    return $args;

}

6ss1mwsb

6ss1mwsb3#

此代码应添加到您的主题的functions.php

add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');

function custom_default_catalog_orderby() {
     return 'date'; // Can also use title and price
}
bvpmtnay

bvpmtnay4#

这个代码为我工作。

/**
 * This code should be added to functions.php of your theme
 **/

add_filter('woocommerce_default_catalog_orderby', 'custom_default_catalog_orderby');

function custom_default_catalog_orderby() {
     return 'date'; // Can also use title and price
}

我在这里找到的https://gist.github.com/mikejolley/1622323

hlswsv35

hlswsv355#

Mike Jolley的Gist评论中的另一个片段对我很有效:

add_filter('woocommerce_get_catalog_ordering_args', 'custom_default_catalog_orderby');

function custom_default_catalog_orderby( $args ) {
if(!isset( $_GET['orderby'] ) ) {
$args['orderby'] = 'date';
$args['order'] = 'dsc';
return $args;
}
}

这迫使最新的产品首先出现,在我的客户的情况下,这只在主商店页面上工作,而不是在产品类别档案中。这个片段修复了它,其他人没有。对我来说更大的问题是为什么WooCommerce仍然有这么多主要的bug!
参考号:https://gist.github.com/mikejolley/1622323

kyks70gy

kyks70gy6#

add_action( 'woocommerce_product_query', 'default_catalog_ordering_desc', 10, 2 );
function default_catalog_ordering_desc( $q, $query ){
    if( $q->get( 'orderby' ) == 'date' )
        $q->set( 'order', 'DESC' );
}

相关问题