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

如何检查WooCommerce是否存在产品?代码优化求助

正确实现WooCommerce产品检查与展示的代码方案

你的代码核心问题在于循环逻辑错误:当网站没有产品时,$sk_all_products->have_posts()会返回false,while循环根本不会执行,导致提示信息永远无法显示;同时在循环内判断get_the_ID()完全没有必要——能进入循环的都是已存在的产品,get_the_ID()不可能为false。

以下是修正后的代码:

// 构建产品查询参数
$crtp_args = array(
    'post_type' => 'product',
    'posts_per_page' => -1, // 展示所有产品,可根据需求调整
    'post_status' => 'publish' // 只查询已发布的产品
);
$sk_all_products = new WP_Query( $crtp_args );

// 先判断是否有产品
if ( $sk_all_products->have_posts() ) {
    // 有产品则进入循环展示
    while ( $sk_all_products->have_posts() ) : $sk_all_products->the_post();
        global $product;
        
        // 输出产品标题(可根据需求扩展展示内容,比如价格、图片等)
        echo '<h3>' . get_the_title() . '</h3>';
    endwhile;
    
    // 重置文章数据,避免影响后续查询
    wp_reset_postdata();
} else {
    // 没有产品时输出提示信息
    echo esc_html__( 'You don\'t have any products. Please add your products.', 'super-men' );
}

关键优化点说明:

  • 先判断后循环:先通过$sk_all_products->have_posts()判断是否存在产品,再决定执行展示逻辑还是提示逻辑,确保两种场景都能覆盖。
  • 添加必要参数:补充posts_per_page和post_status参数,让查询更精准(默认posts_per_page是10,设置-1可获取所有产品;post_status确保只查询已发布的有效产品)。
  • 正确重置数据:使用wp_reset_postdata()而非wp_reset_query()——前者用于重置自定义WP_Query的文章数据,后者是针对主查询的重置,语义更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:20:45