如何修改WooCommerce的默认产品排序方式?

一、修改默认排序规则

WooCommerce 3.3.0 及以上版本,调整了产品默认排序的修改入口,

  1. 进入 WordPress 后台,点击 外观-> 自定义(Customizer)。
  2. 找到 WooCommerce → 产品目录 部分。
  3. 在 默认产品排序 下拉菜单中选择预设的排序方式(如“最新”、“价格从低到高”等)。
  4. 点击 发布 保存更改。

您可能会在上面的截图中看到,当我们在自定义器中更改默认产品排序的值时,产品列表上方的产品排序下拉菜单中的值也会随之更改。

二、手动调整单个产品的排序

此方法能更好的对WooCommerce产品进行排序,精准控制个别产品在WooCommerce商店页面的显示顺序。

但要注意,它设置起来比较耗时,不适合产品上千的独立站商城。

要想手动调整产品排序,先转到WordPress左侧菜单栏的产品 > 全部产品,然后点击排序,就可以拖动产品向上或向下调整顺序。

WooCommerce 的默认排序方式是 “菜单排序”,即手动排序,如果没有设置手动产品排序,产品将按字母顺序显示。

进入 WordPress 管理页面的 “所有产品”,然后点击 “排序 “选项卡。然后使用拖放即可。

第二种方法是在产品数据元方框中手动设置 menu_order 值。

How to change product ordering position in WooCommerce

现在,让我来教你如何将默认的产品排序 “menu_order + title “改为其他方式。这也可以在 WooCommerce 设置中完成,甚至可以使用过滤器钩子。

三、使用编程方式实现更多高级排序功能

如果你对默认的产品排序选项不满意,还可以添加代码到 functions.php 文件,生成自己的产品排序选项。为此,你需要创建子主题或使用代码片段,确保网站不会受到影响。

首先,在WordPress网站上安装并启用 Code Snippets 代码片段插件。

Code Snippets

然后,转到WordPress左侧菜单栏 > Snippets,点击 Add New 添加代码。

添加新的代码片段

接下来,复制粘贴代码到文本框中,保存修改,就能生成新的产品排序选项。

添加代码示例

至于产品排序代码,本文分享了按分类和按字母对产品排序,希望能对大家有所帮助。

按库存状态排序(有货优先):

add_filter( 'posts_clauses', 'custom_sort_by_stock_status', 10, 2 );
function custom_sort_by_stock_status( $clauses, $query ) {
    global $wpdb;
    if ( is_woocommerce() && ( is_shop() || is_product_category() || is_product_tag() )) {
        $clauses['join'] .= " LEFT JOIN $wpdb->postmeta istock ON ($wpdb->posts.ID = istock.post_id AND istock.meta_key = '_stock_status')";
        $clauses['orderby'] = " istock.meta_value ASC, " . $clauses['orderby'];
    }
    return $clauses;
}

按照产品类别对产品进行排序:

add_filter('woocommerce_default_catalog_orderby', 'quadlayers_catalog_orderby_for_category');
function quadlayers_catalog_orderby_for_category( $sort_by ) {
    if( !is_product_category('uncategorized') ) { 
        return $sort_by;
    }
    return 'date';
}

按照字母顺序对产品进行排序:

function quadlayers_alphabetical_shop_ordering( $sort_args ) {
    $orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    if ( 'alphabetical' == $orderby_value ) {
        $sort_args['orderby'] = 'title';
        $sort_args['order'] = 'asc';
        $sort_args['meta_key'] = '';
    }
    return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'quadlayers_alphabetical_shop_ordering')
分享你的喜爱
庄朋龙
庄朋龙
文章: 38

留下评论

QQ客服
微信客服
电话客服