通用文章删除后处理扩展
通过 Filter_Plugin_DelPost_Succeed 接口,可以在 Z-BlogPHP 删除任意 Post 类对象成功之后执行自定义逻辑。该接口在 DelPost() 函数内触发,此时对象已从数据库删除、评论计数已清理、导航栏项已移除,是 1.7.0 加入的通用删除出口。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_DelPost_Succeed | &$post | Post 类对象的通用删除成功接口(1.7.0 加入) |
完整案例
下例在删除成功后记录一条删除日志,包含被删对象的 ID、类型与标题,便于追溯删除操作:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_DelPost_Succeed', 'demoAPP_DelPost_Succeed');
}
function demoAPP_DelPost_Succeed(&$post)
{
global $zbp;
// 删除成功后写日志,对象属性仍可读取,但数据已不在数据库中
$file = $zbp->usersdir . 'plugin/demoAPP/del.log';
$log = date('Y-m-d H:i:s') . ' 删除 #' . $post->ID
. ' Type=' . $post->Type . ' ' . $post->Title
. ' 操作人=' . $zbp->user->Name . PHP_EOL;
file_put_contents($file, $log, FILE_APPEND);
}注意事项
- 触发位置:在
DelPost()中、$post->Del()、文章评论数据清理(DelArticle_Comments)与导航栏项移除完成之后; - 触发时对象已从数据库删除,但内存中的
$post属性仍可读取,适合做删除日志;不要再对该对象调用Save(),否则会把已删除的数据重新写回; - 参数按引用传递,回调函数签名可写成
&$post;与本流程前段的Filter_Plugin_DelPost_Core(删除前触发,适合备份)配合可实现删除留痕的完整闭环; - 只有走通用
DelPost()的删除流程才会触发本接口;文章、页面的专用删除函数DelArticle()、DelPage()分别使用Filter_Plugin_DelArticle_Succeed、Filter_Plugin_DelPage_Succeed; - 若
Post对象的 ID 不存在($post->ID为 0),整个删除流程会直接跳过,本接口不会触发。