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

WooCommerce缺货产品后置排序代码触发PHP Notice报错如何解决

问题原因

  • 原代码没有限制仅作用于前端主查询,当WordPress执行未初始化完成的辅助查询、后台查询、结账/购物车页面的订单查询时,都会触发钩子执行逻辑,触发PHP警告,同时导致非商品列表页面逻辑异常。

需要添加的判断条件

你需要在原有if判断中新增以下3类判断:

  • 限制仅作用于前端:!is_admin()
  • 限制仅作用于主查询:is_main_query()
  • 排除非商品列表的WooCommerce页面:!is_cart() && !is_checkout() && !is_account_page()

修复后完整代码

add_filter('posts_clauses', 'order_by_stock_status', 60);
function order_by_stock_status($posts_clauses) {
    global $wpdb;
    // 仅在WooCommerce前端商品列表主查询中修改查询逻辑
    if (!is_admin() && is_main_query() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy()) && !is_cart() && !is_checkout() && !is_account_page() ) {
        $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;
}

额外优化说明

如果仍然存在边缘场景的警告,可以在判断最前面额外添加isset($wp_query) && $wp_query instanceof WP_Query 确保查询对象已完成初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 14:45:04