MENU

clean_post_cache()

clean_post_cache() は、特定の投稿・カスタム投稿タイプのキャッシュ(オブジェクトキャッシュやターム、メタデータなど)を削除する WordPress の内部関数です。

投稿の内容やステータスを更新した際にキャッシュが残っていると、フロントエンドや管理画面に古い情報が表示されてしまうことがあります。

この関数を使えば、対象投稿のあらゆる関連キャッシュを明示的に削除でき、即座に最新の状態を反映できます。

目次

基本構文

clean_post_cache( $post_id );

解説

  • $post_id:キャッシュをクリアしたい投稿の ID(整数)

この関数は投稿 ID に紐づいた以下のようなキャッシュをクリアします:

  • 投稿本体(get_post() の結果)
  • 投稿のターム情報(カテゴリー・タグ)
  • 投稿メタ情報(カスタムフィールド)
  • パーマリンク
  • グローバル変数 $post

引き数と戻り値

スクロールできます
引き数説明
$post_idintキャッシュを削除する投稿の ID
スクロールできます
戻り値説明
なし副作用としてキャッシュ削除が行われる

使用例

タグを使った使用例

$post_id = 123;

// 投稿の内容を更新したあとにキャッシュを削除
wp_update_post( [
  'ID' => $post_id,
  'post_title' => '更新されたタイトル'
] );

clean_post_cache( $post_id );

投稿を更新した直後にキャッシュをクリアして、変更がすぐに反映されるようにしています。

注意点

投稿 ID のみを引数にとる点に注意

WP_Post オブジェクトではなく、ID を渡す必要があります。

自動キャッシュ削除が行われることも多いため、過度な使用は不要

通常の投稿更新処理では内部でこの関数が呼ばれるため、重複呼び出しに注意。

特定のカスタム投稿タイプや独自処理では明示的に必要な場面がある

例:メタ情報やタームを update_post_meta() などで更新した場合。

よく一緒に使われる関数

wp_update_post()

wp_update_post( [
  'ID' => $post_id,
  'post_content' => '新しい本文'
] );
clean_post_cache( $post_id );

投稿を更新した直後にキャッシュをクリア。

update_post_meta()

update_post_meta( $post_id, 'custom_key', '新しい値' );
clean_post_cache( $post_id );

カスタムフィールド変更後にキャッシュをクリアして反映。

get_post()

$post = get_post( $post_id );
clean_post_cache( $post_id );

投稿取得後、キャッシュを明示的に削除。

想定されるトラブル

投稿を更新しても表示が変わらない

キャッシュが残っており、古い内容が表示されてしまう。

解決方法

更新後に clean_post_cache() を実行することで、キャッシュを削除し即時反映。

タクソノミーの変更が反映されない

カテゴリーやタグを wp_set_post_terms() で変更しても、反映されないケースがある。

解決方法

ターム変更後に clean_post_cache() を呼び出すことで整合性を取る。

Q&A

この関数は固定ページにも使えますか?

はい、固定ページも投稿 ID を指定すれば問題なく使えます。ただし clean_page_cache() の方が最適です。

投稿削除時にも呼び出すべきですか?

通常は wp_delete_post() 内で自動的に呼ばれるため、明示的な呼び出しは不要です。

投稿更新後にキャッシュを即時反映させたいときは?

投稿更新後に clean_post_cache() を呼び出すことで即座に反映されます。

まとめ

clean_post_cache() は、投稿やカスタム投稿タイプに関するキャッシュを削除して、常に正しいデータを表示させるための重要な内部関数です。

通常の編集操作では自動的に呼び出されますが、独自処理やメタ更新、タクソノミー操作後には明示的に使用することで、キャッシュ整合性を維持することができます。

開発中に「更新が反映されない」と感じた時は、この関数の利用を検討しましょう。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次