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

Umbraco 13:如何读取内置发布日期实现最新文章排序筛选

Umbraco 13 改用内置发布/取消发布日期实现「最新文章」功能

问题背景

此前通过自定义字段publishStartDate和publishEndDate控制文章可见性并排序,现需替换为Umbraco内置的「Publish At」和「Unpublish At」调度日期,避免字段重复,同时更新查询与排序逻辑。

修改后的代码实现

using Umbraco.Cms.Core.Models.ContentEditing;

var articles = page.Descendants("Article")
    .Where(t => 
        t.IsPublished() && 
        t.IsVisible() &&
        // 校验内置Publish At:未设置则直接通过,已设置需早于等于当前日期
        (t.ContentSchedule.Items.FirstOrDefault(x => x.Action == ContentScheduleAction.Publish)?.Date ?? DateTime.MinValue) <= DateTime.Now.Date &&
        // 校验内置Unpublish At:未设置则直接通过,已设置需晚于等于当前日期
        (t.ContentSchedule.Items.FirstOrDefault(x => x.Action == ContentScheduleAction.Unpublish)?.Date ?? DateTime.MaxValue) >= DateTime.Now.Date)
    .OrderByDescending(t => t.Value<bool>("featured"))
    .ThenByDescending(t => 
        // 排序优先用计划发布日期,未设置则回退到实际发布日期
        t.ContentSchedule.Items.FirstOrDefault(x => x.Action == ContentScheduleAction.Publish)?.Date ?? t.PublishDate)
    .Take(4)
    .ToList();

关键逻辑说明

  • 读取内置调度日期:通过ContentSchedule.Items获取内容的计划任务,筛选ContentScheduleAction.Publish(对应「Publish At」)和ContentScheduleAction.Unpublish(对应「Unpublish At」)的条目,提取日期值。
  • 空值兼容处理:若未设置调度日期,用DateTime.MinValue(发布条件)和DateTime.MaxValue(取消发布条件)确保逻辑兼容「立即发布」「永久发布」的原有场景。
  • 排序规则替换:排序时优先使用计划发布日期,若未设置则回退到内容的实际发布日期t.PublishDate,保持原有的「置顶优先、最新优先」排序逻辑。
  • 保留原有校验:继续使用IsPublished()和IsVisible()确保只获取已发布且前端可见的内容。

内容的提问来源于stack exchange,提问作者Chris Disley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:44:54