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

如何修改代码使Elementor AJAX商品小部件隐藏WooCommerce缺货产品

Elementor商品存档小部件开启AJAX后隐藏缺货产品解决方案

失效原因

  • 原有代码添加了!is_admin()判断,而WordPress所有前端AJAX请求都是走后台admin-ajax.php接口,默认会被is_admin()判定为后台请求,导致AJAX场景下过滤逻辑直接被跳过
  • Elementor开启AJAX的商品存档小部件部分场景下会调用自身的查询钩子,仅挂载WooCommerce原生钩子无法覆盖AJAX查询场景

修改后兼容AJAX的代码(基于Tax Query实现,适配WooCommerce 3.0+版本)

// 覆盖原生WooCommerce商品小部件查询
add_filter( 'woocommerce_products_widget_query_args', 'custom_hide_outofstock_in_elementor_widget', 10, 1 );
// 覆盖Elementor AJAX场景下的商品查询
add_filter( 'elementor/query/get_query_args', 'custom_hide_outofstock_in_elementor_widget', 10, 1 );

function custom_hide_outofstock_in_elementor_widget( $query_args ) {
    // 仅排除真正的后台管理页面请求,放行前端AJAX请求
    if ( is_admin() && ! wp_doing_ajax() ) {
        return $query_args;
    }
    // 仅针对商品查询生效
    if ( isset( $query_args['post_type'] ) && $query_args['post_type'] === 'product' ) {
        $query_args['tax_query'][] = array(
            'taxonomy' => 'product_visibility',
            'field'    => 'name',
            'terms'    => array('outofstock'),
            'operator' => 'NOT IN'
        );
    }
    return $query_args;
}

使用说明

  • 替换你原来的两段代码,将上述代码添加到主题的functions.php文件或者自定义代码片段插件中即可生效
  • 该代码同时兼容AJAX开启和关闭两种场景,无需额外修改小部件配置
  • 如果你更习惯使用Meta Query实现,只需要把代码中tax_query部分替换为你原有的meta_query逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:02