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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:47:06