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

如何解决WooCommerce添加售罄商品后置排序功能后的属性读取警告

问题原因

你当前使用的售罄商品排序代码未限制仅作用于商品列表主查询,会修改所有前台WordPress查询(包括导航菜单、侧边栏小工具、页面查询等非商品查询),错误的JOIN和WHERE条件会导致这些非商品查询返回空结果,get_queried_object()拿到空值就会触发读取属性的警告。

解决方案

直接替换你现有的排序代码为以下修正版即可,保留排序功能的同时消除警告:

/**
* Sorting out of stock WooCommerce products - Order product collections by stock status, in-stock products first.
*/
class iWC_Orderby_Stock_Status
{
public function __construct()
{
// Check if WooCommerce is active
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, 2);
}
}
public function order_by_stock_status($posts_clauses, $query)
{
global $wpdb;
// 仅修改WooCommerce商品列表主查询
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag()) && $query->is_main_query()) {
$posts_clauses['join'] .= " LEFT JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id AND istockstatus.meta_key = '_stock_status') ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] .= " AND (istockstatus.meta_value <> '' OR istockstatus.meta_value IS NULL) ";
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;
/**
* END - Order product collections by stock status, instock products first.
*/

修正说明

  • 新增is_main_query()判断,仅修改商品列表的主查询,不会影响其他辅助查询
  • 将INNER JOIN改为LEFT JOIN,避免个别无_stock_status字段的商品被意外过滤
  • 调整条件拼接逻辑,避免和原有查询规则冲突

替换代码后清空WordPress缓存和浏览器缓存即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:30:03