如何在无即将举办的Event自定义文章类型时隐藏对应Section
实现无即将活动时隐藏整个section的方法
核心思路是先执行活动查询,再根据查询结果决定是否渲染整个section区块,具体修改如下:
- 将WP_Query的查询代码移到
标签之前,先获取活动数据 - 用
$homepageEvents->have_posts()判断是否存在符合条件的活动,只有当结果存在时,才输出内的所有内容 - 循环结束后重置查询上下文,避免影响后续WordPress操作
修改后的完整代码:
<?php $today = date('Ymd'); $homepageEvents = new WP_Query(array( 'posts_per_page' => 3, 'post_type' => 'event', 'meta_key' => 'event_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'event_date', 'compare' => '>=', 'value' => $today, 'type' => 'numeric' ) ) )); // 只有存在即将举办的活动时,才渲染整个section if ($homepageEvents->have_posts()) { ?> <section class="row home-news bg-pale-blue" id="events__section"> <div class="inner"> <div class="block"> <div class="columns listing-title wide-gutter"> <div class="col1-2 title"> <h3>Upcoming Events</h3> </div> </div> <div class="columns article-listing news-listing wide-gutter"> <?php while($homepageEvents->have_posts()){ $homepageEvents->the_post(); ?> <div class="col1-3 item"> <a class="blog-line" href="<?php the_permalink(); ?>"> <span class="date"><?php the_field('event_date',$post->ID); ?></span> <h2><?php the_title(); ?></h2> <p><?php echo wp_trim_words(get_field('summary_text',$post->ID), 25); ?></p> <span class="more-link"><i class="fa fa-chevron-circle-right"></i> Read more</span> </a> </div> <?php } // 重置查询上下文,恢复原始文章数据 wp_reset_postdata(); ?> </div> </div> </div> </section> <?php } ?>
关键修改说明
- 前置查询:把活动查询逻辑放在
之前,提前判断是否有符合条件的活动 - 条件渲染:通过
if ($homepageEvents->have_posts())包裹整个section,确保无活动时不输出任何相关HTML - 重置查询:添加
wp_reset_postdata(),避免自定义查询影响后续WordPress的全局文章数据(比如首页其他内容的查询)
内容的提问来源于stack exchange,提问作者user22722114
相关产品推荐
相关产品推荐

