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

WordPress中短代码返回空时如何使用PHP条件判断语句

解决方案

你之前用的have_posts()是针对WordPress主查询的,而[display-posts]短码内部会创建独立的查询实例,两者状态不关联,所以判断无效。要实现仅当短码查询到文章时才加载区块,有两种可靠方法:

方法1:手动执行匹配短码的查询(推荐)

先复制短码的查询参数执行查询,判断是否有结果后再输出区块和短码:

<?php
// 完全匹配短码的查询参数,若短码有其他参数(如post_type、category)需一并添加
$display_post_args = array(
    'posts_per_page' => 10,
    'post_status' => 'publish' // 确保只查已发布文章,和短码默认行为一致
);
$display_post_query = new WP_Query($display_post_args);

if ($display_post_query->have_posts()) : ?>
<section id="client-posts">
    <div class="wrapper">
        <?php echo do_shortcode('[display-posts posts_per_page="10"]'); ?>
    </div>
</section>
<?php
// 重置查询,避免干扰后续主循环
wp_reset_postdata();
endif;
?>

方法2:捕获短码输出并判断内容

如果不想手动写查询,可以先获取短码的输出,判断是否包含实际文章内容(避免短码输出空容器导致误判):

<?php
$shortcode_content = do_shortcode('[display-posts posts_per_page="10"]');
// 检查输出是否非空,且包含文章相关标签(比如<article>,需根据短码实际输出调整)
if (!empty(trim($shortcode_content)) && strpos($shortcode_content, '<article') !== false) : ?>
<section id="client-posts">
    <div class="wrapper">
        <?php echo $shortcode_content; ?>
    </div>
</section>
<?php endif; ?>

原代码无效的原因

have_posts()仅反映当前页面主查询的状态(比如当前文章页的主查询是单篇文章),和[display-posts]短码内部的独立查询完全无关。哪怕短码要查询的文章为空,主查询仍可能有结果,导致区块被错误加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:50:10