WordPressで投稿に日付情報を持つカスタムフィールドを設定している場合、そのデータを活用して最も古い年と最新の年を取得することができます。本記事では、データベースから効率的に取得し、キャッシュを活用する方法について解説します。
1. なぜカスタムフィールドの日付データを取得するのか?
WordPressでは、カスタム投稿タイプやカスタムフィールドを使用して様々なデータを管理できます。例えば、以下のようなケースで日付情報を管理することが考えられます。
- イベントの開催日
- 商品リリース日
- 歴史的な記録の公開日
これらのデータから「最も古い年」と「最新の年」を取得することで、データ範囲を把握したり、フィルタリング機能を実装したりするのに役立ちます。
2. 投稿データから最古・最新の年を取得する方法
データベースから最小・最大の日付を取得
WordPressの postmeta
テーブルから、特定のカスタムフィールド (event_date
など) の最小値と最大値を取得します。
function get_oldest_and_latest_year() {
global $wpdb;
$results = $wpdb->get_row("SELECT
MIN(meta_value) AS oldest_date,
MAX(meta_value) AS latest_date
FROM {$wpdb->postmeta}
WHERE meta_key = 'event_date'
AND meta_value IS NOT NULL
AND meta_value != ''");
if ($results && !empty($results->oldest_date) && !empty($results->latest_date)) {
return [
'oldest_year' => date('Y', strtotime($results->oldest_date)),
'latest_year' => date('Y', strtotime($results->latest_date))
];
}
return null;
}
この関数を実行すると、最も古い年と最新の年を配列で返します。
キャッシュを活用してパフォーマンスを向上
頻繁に変わらないデータである場合、WordPressの transient
を使用することでデータベースアクセスを減らし、サイトのパフォーマンスを向上させることができます。
function get_cached_oldest_and_latest_year() {
$cache_key = 'custom_oldest_latest_year';
$cached_data = get_transient($cache_key);
if ($cached_data !== false) {
return $cached_data;
}
$years = get_oldest_and_latest_year();
if ($years) {
set_transient($cache_key, $years, DAY_IN_SECONDS * 7); // 1週間キャッシュ
}
return $years;
}
この get_cached_oldest_and_latest_year()
を使用すると、データは1週間キャッシュされ、無駄なクエリを減らすことができます。
3. 投稿の追加・更新・削除時にキャッシュをクリア
投稿データが変更された際にキャッシュを削除し、次回アクセス時に最新のデータを取得できるようにします。
投稿の保存・更新時にキャッシュを削除
function clear_oldest_latest_year_cache_on_save($post_id, $post) {
if ($post->post_type === 'custom_post_type') {
delete_transient('custom_oldest_latest_year');
}
}
add_action('save_post', 'clear_oldest_latest_year_cache_on_save', 10, 2);
投稿の削除時にキャッシュを削除
function clear_oldest_latest_year_cache_on_delete($post_id) {
$post = get_post($post_id);
if ($post && $post->post_type === 'custom_post_type') {
delete_transient('custom_oldest_latest_year');
}
}
add_action('before_delete_post', 'clear_oldest_latest_year_cache_on_delete');
これにより、投稿データが変更されたときに最新のデータが反映されます。
4. フロントエンドでの使用例
取得した最古・最新の年を表示するには、以下のようにします。
$years = get_cached_oldest_and_latest_year();
if ($years) {
echo "最も古い年: " . $years['oldest_year'] . "<br>";
echo "最新の年: " . $years['latest_year'];
} else {
echo "データがありません";
}
5. まとめ
- WordPressの
postmeta
テーブルからMIN()
とMAX()
を使用して最古・最新の日付を取得 transient
を活用してキャッシュし、パフォーマンスを向上- 投稿の追加・更新・削除時にキャッシュを削除し、最新データを反映
- フロントエンドで取得したデータを表示
コメント