WordPress首页模板按发布日期排序文章失败求助
解决WordPress手动选择文章按发布日期排序的问题
你之前直接对存储post_id的数组排序无效,因为post_id和发布日期没有对应关联,必须先获取每个ID对应的文章对象,再基于文章的发布日期排序。
修改后的完整代码如下:
<?php $manual_articles = dsi_get_option("manual_articles", "homepage"); $valid_posts = array(); // 先筛选出非event类型的有效文章对象 if(is_array($manual_articles) && count($manual_articles)){ foreach($manual_articles as $idpost){ $post = get_post($idpost); if($post && $post->post_type != "event"){ $valid_posts[] = $post; } } // 按发布日期降序排序(最新文章在前) usort($valid_posts, function($a, $b){ return strtotime($b->post_date) - strtotime($a->post_date); }); } if(!empty($valid_posts)){ ?> <section class="section bg-white py-2 py-lg-3 py-xl-5"> <div class="container"> <div class="title-section pb-4"> <h2 class="h2"><?php _e("News"); ?></h2> </div><!-- /title-section --> <div class="row variable-gutters"> <?php $i = 0; foreach ( $valid_posts as $post ) { if(++$i > 3) break; // 最多显示3篇 setup_postdata($post); // 确保模板部分能正确获取文章数据 ?> <div class="col-lg-4 mb-4"> <?php get_template_part("template-parts/single/card-vertical-thumb", $post->post_type); ?> </div> <?php } wp_reset_postdata(); // 重置post数据,避免影响后续查询 ?> </div> </div> </section> <?php } ?>
关键修改点说明:
- 先将post_id转换为真实的文章对象,同时过滤掉
event类型的文章 - 使用
usort结合匿名函数,基于文章发布日期的时间戳实现降序排序 - 添加
setup_postdata($post)和wp_reset_postdata(),保证模板片段能正确调用文章标题、缩略图等数据 - 初始化
$i变量,消除未定义变量的隐患
内容的提问来源于stack exchange,提问作者VR93
相关产品推荐
相关产品推荐

