在處理一個現有系統轉移的時候,因為之前是使用 UNIX 時間格式來儲存資料,轉換到使用 Advanced Custom Fields ( 以下稱 ACF ) 為基礎系統的時候,決定要繼續使用 UNIX 時間格式,這樣才不用改太多東西。
但是 ACF 對於日期或是日期時間欄位並不是使用 UNIX 時間格式來儲存時間,所以就要動手調整達成目標啦。
首先處理資料儲存的問題,透過以下的調整,就可以將日期或是日期時間的儲存內容,調整為 UNIX 時間格式。
如果是日期的情況下,會將時間調整為當日的零時。
add_filter('acf/update_value/type=date_picker', 'acf_time_to_unixtime', 10, 3);
add_filter('acf/update_value/type=date_time_picker', 'acf_time_to_unixtime', 10, 3);
function acf_time_to_unixtime($value, $post_id, $field)
{
if (empty($value)) {
return $value;
}
if (is_object($value) && $value instanceof DateTime) {
} elseif (is_numeric($value)) {
if (strlen($value) === 8) {
$value = DateTime::createFromFormat('Ymd', $value, new DateTimeZone('UTC'));
} else {
$value = new DateTime('@' . $value);
}
} else {
$value = new DateTime($value, new DateTimeZone('UTC'));
}
if ($field['type'] == 'date_picker') {
$value->setTime(0, 0, 0);
}
return $value->format('U');
}
再來處理資料取出的問題。
真是開心什麼事情都不用做,因為原先 ACF 就有調整輸出格式的功能,而他的處理流程,是可以接受使用 UNIX 時間格式當作資料來源的。
另外,本次提供的調整範例,當你自行開發的部分使用 update_field
直接設定數值的情況下,是可以使用 PHP 的日期時間物件直接更新資料的。
如果你不知道如何加入程式碼到你的網站,或是需要一個輕鬆簡單的方法加入程式碼,推薦使用 Code Snippets。
他是一款讓你在後台就可以輕鬆加入程式碼到網站中的外掛。並且加入的程式碼還可以個別的設定啟用或停用,讓你輕鬆的管理這些額外加入的程式碼片段。
如果對於該外掛使用上有疑問,請至外掛頁面觀看說明或是與官方團隊聯繫。