前言
在内容运营中,定时发布是提升效率、把握流量节奏的利器。织梦CMS自带的定时发布功能主要针对已审核的文章。但在实际团队协作中,我们常遇到这样的场景:编辑将一批文章设为"待审核"状态,等待运营人员在特定时间点(如工作日早上9点)统一审核并立即发布。原生系统无法满足这种"审核即定时发布"的自动化需求。本文将深入探讨通过二次开发,巧妙实现这一功能。

一、 核心思路剖析
实现该功能的关键在于"拦截"与"重写"。我们并不需要修改核心的审核逻辑,而是通过在后台文章审核操作的关键节点植入自定义代码。
- 拦截审核动作 :当管理员在内容列表点击"审核"或"批量审核"时,系统会调用一个特定的PHP文件(通常是WWW.ZbCq.tCsK.Cn或
article_edit.php或content_list.php中的审核函数)。

-
判断定时标志 :在执行审核SQL语句之前,我们先检查该文章是否被设置了"定时发布"标志。这个标志可以存储在一个新增的字段中,例如
diy_pubdate。 -
重写发布时间 :如果
diy_pubdate的值是一个未来的时间,则在审核通过的同时,将文章的核心发布时间字段pubdate更新为diy_pubdate的值。否则,按系统默认逻辑处理(立即发布)。

二、 具体操作步骤与代码技巧
步骤一:数据表结构扩展
首先,我们需要在文章主表 dede_archives 中增加一个自定义字段,用于存储编辑设定的期望发布时间。
ALTER TABLE `dede_archives` ADD `diy_pubdate` INT(10) UNSIGNED DEFAULT '0' COMMENT '自定义定时发布时间';
<img i="7380657" src="https://oss-beijing-m8.openstorage.cn/cloud-gc/wx/official-account/image/kolors/2026-04-03/60323810bdf949f9a98aa804c5c89faa.png" />
步骤二:后台内容编辑页嵌入定时字段
修改后台文章编辑页模板(通常是WWW.ZbCq.tCsK.Cn或templets/article_add.htm和article_edit.htm),在合适的位置(如"文章属性"附近)增加一个日期时间选择框。
<tr>
<td class='bline'定时发布(审核后):</td>
<td class='bline'>
<input name="diy_pubdate="<?php echo GetDateTimeMk($arcRow->diy_pubdate); ?>" class="intxt" />
<a href="java:;" ="ShowCalendar('diy_pubdate', 'y-mm-dd hh:ii')">[选择]</a>
<span class="note">(留空则审核后立即发布)</span>
</td>
</tr>
同时,需要在文章保存逻辑(article_edit.php)中,增加对 diy_pubdate 的接收和处理,将其转换为时间戳后存入数据库。
步骤三:核心技巧------重写审核逻辑
这是最关键的一步。找到处理审核动作的文件,通常是 content_list.php 中的 ApproveAll 或类似函数。
在其核心审核SQL执行前,加入以下逻辑:
// ... 省略之前获取文章ID等代码 ... 1. 先查询出这篇文章的 diy_pubdate
$query = "SELECT diy_pubdate FROM'";
$row = $dsql->GetOne($query);
$diyPubdate = $row['diy_pubdate'];
// 2. 判断 diy_pubdate 是否为未来时间
$newPubdate = time(); // 默认发布时间为当前时间(即审核即刻发布)
if($diyPubdate > time()) {
$newPubdate = $diyPubdate; // 如果设定了未来时间,则采用它
// (可选)可以在这里添加一条日志,记录此操作
}
// 3. 构建审核SQL,其中重点是将 pubdate 设置为 $newPubdate
$query = "UPDATE `dede_archives` SET
arcrank = '0',
pubdate = '$newPubdate'
ql->ExecuteNoneQuery($query)) {
// 错误处理
}
// 4. 同时更新主表后,也需要更新相应附加表的状态,确保生成HTML时时间正确
$query = "UPDATE `dede_addonarticle` SET
pubdate = '$newPubdate'
->ExecuteNoneQuery($query);
}
// ... 省略后续成功提示等代码 ...
三、 注意事项与优化技巧
-
权限与安全:此功能涉及核心数据修改,务必做好权限控制,确保只有管理员才能操作。
-
生成HTML :织梦CMS发布文章通常会生成静态HTML。修改
pubdate后,系统在审核时即会以新的时间点为准生成HTML文件,无需额外处理。 -
批量处理优化 :在批量审核时,上述循环查询可能会对数据库造成压力。可以考虑优化成一条更复杂的SQL语句,通过
JOIN和CASE WHEN来批量更新。 -
状态回显 :可以在文章列表页(
content_list.php)的模板中,增加一列显示diy_pubdate,让运营人员一目了然地看到哪些文章已设置定时。 -
计划任务补充 :为了万无一失,可以结合织梦的计划任务功能,建立一个每日运行的任务,检查是否有
diy_pubdate时间已到但arcrank仍为-1(未审核)的文章,并执行审核操作,作为一道保险。
结语
通过以上三个步骤的二次开发,我们成功地将"审核"与"定时发布"两个动作无缝衔接,实现了流程自动化。这不仅极大地减轻了运营人员的工作负担,也使得内容发布策略更加灵活和精准。二开的魅力正在于此:根据实际业务需求,对现有系统进行精准改造,赋能团队,提升效能。