在 Woocommerce 中按 DESC 顺序对产品进行排序

问题描述 投票:0回答:6

我在我的活动主题的

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

我尝试按描述对产品进行排序,但产品仍然默认排序(ASC)

如何按 DESC 对它们进行排序?

php wordpress sorting woocommerce product
6个回答
8
投票

您可以通过这种方式使用挂接在

woocommerce_product_query
动作挂钩中的自定义函数:

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文件或任何插件文件中。

已测试且有效。


3
投票

您需要首先决定要按哪个字段对价格标题等进行排序。但我已经写了您可以使用它的所有可能方法,

add_filter('woocommerce_get_catalog_ordering_args','custom_query_sort_args');

函数custom_query_sort_args() {

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

}


1
投票

此代码应添加到您主题的

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
}

0
投票

这段代码对我有用。

/**
 * 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


0
投票

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

这迫使最新的产品首先出现,在我的客户的例子中,它仅在商店主页上起作用,而在产品类别档案中不起作用。这个片段修复了它,其他的没有。

参考:https://gist.github.com/mikejolley/1622323


-2
投票
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' );
}
© www.soinside.com 2019 - 2024. All rights reserved.