You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让WooCommerce首页默认优先显示可购买商品?现有代码仅分类页生效

解决方案

代码修改方案(推荐)

你原代码的问题是仅针对WooCommerce内置的商店/分类/标签页生效,而首页小部件的产品查询不属于这些页面类型,所以需要调整判断逻辑,让所有前台产品查询都应用库存排序。

替换你现有的代码为以下版本:

class iWC_Orderby_Stock_Status {
    public function __construct() {
        if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
            add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
        }
    }

    public function order_by_stock_status($posts_clauses) {
        global $wpdb, $wp_query;   
        
        // 仅对前台的产品查询生效(覆盖首页小部件、商店/分类/标签页)
        if ( ! is_admin() && $wp_query->get('post_type') === 'product' ) {
            $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
            $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
            $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
        }
        return $posts_clauses;
    }
}
new iWC_Orderby_Stock_Status;

修改说明:

  • 移除了原有的页面类型限制,改为检查当前查询的内容类型是产品且处于前台(避免影响后台操作)
  • 这样不管是首页小部件的产品列表,还是WooCommerce内置页面,都会自动按「可购买(instock)在前,不可购买(outofstock)在后」的规则排序
  • 如果只想让首页和原有页面生效,可把判断条件改成:
    if ( ! is_admin() && $wp_query->get('post_type') === 'product' && (is_front_page() || is_shop() || is_product_category() || is_product_tag()) )
    

插件方案

如果不想修改代码,可选择支持默认按库存状态排序的WooCommerce插件:

  • 搜索「WooCommerce Default Sort Order by Stock Status」这类插件,安装后启用即可实现默认排序需求,无需额外设置可视化筛选功能
  • 注意选择更新维护活跃、与你的WooCommerce版本及Orchid Store主题兼容的插件

内容的提问来源于stack exchange,提问作者ProgerMir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:15:36