本篇文章更新時間:2020/01/02
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
這個需求 WordPress 本身就有提供一個版本修訂功能 Revisions,讓誤改有反悔的可能。
但需求不同往往功能也就變化不少。今天這需求主要是為了符合歐洲法規,客戶網站上公告的職缺本身需要有一個履歷紀錄,紀錄何時上架、何時修訂、修訂內容。
剛好先前有討論過一些外掛([WordPress] 追蹤網站操作與修訂的工具 – Simple History)能夠紀錄後台操作,追蹤使用情況。而這篇 What is the Best Plugin to Track WordPress Revisions? 更是有比較了其他類似的外掛,也不妨看看!
可惜,「全站」並非我要關注的,我只想記錄某一個內容類型。找不到外掛的情況下,就自己來實作看看,以下是一個基礎程式:
function mxp_get_post_edit_log($new_status, $old_status, $post) {
if ($post->post_type != "page") {
return;
}
//取得編修人
$current_user = wp_get_current_user();
//組合紀錄格式
$sp_line = "-.-.-.-.-.-.-.-.-.-.-.-";
$log_user = "User ID: {$current_user->ID}:{$current_user->display_name}";
$log_message = $log_user . " > " . $post->post_type . " -> status: " . $old_status . " to " . $new_status . " at " . date('Y-m-d H:i:s') . " | " . time();
$log_content = $log_message . PHP_EOL . "Title: " . $post->post_title . PHP_EOL . $sp_line . PHP_EOL . $post->post_content . PHP_EOL . $sp_line . PHP_EOL;
//創建目錄
$upload_dir = wp_upload_dir();
$log_dirname = $upload_dir['basedir'] . '/post_edit_log';
if (!file_exists($log_dirname)) {
wp_mkdir_p($log_dirname);
}
error_log($log_content, 3, $log_dirname . "/" . $post->ID . ".log");
}
add_action('transition_post_status', 'mxp_get_post_edit_log', 10, 3);
Gist: Link
其實不難,但簡陋不少!程式設計是在 uploads/post_edit_log
目錄下存放編修記錄檔案,以供備查。至於檔案內容格式之後完全可以再根據明確一點的需求來改囉!