update_post_meta
ファンクションを使うと、記事のカスタムフィールドの値をプログラムによって書き換えることができます。
そしてカスタムフィールドは、WP_Query
などで検索をするとき、meta_query
パラメーターで絞り込みをする事ができます。
今回、この2つの処理を組み合わせて、検索結果を表示した後、カスタムフィールドの値に変化を加えて、検索結果を変更するというプログラムを作成したのですが、ここでトラブルが発生しました。
カスタムフィールドを変化させても検索結果が変化しない
カスタムフィールドの内容を変更して検索結果を表示すると、当然ながら結果に変化が現れることを期待します。しかし、プログラムを実際に制作して動作させたところ、検索結果が変化しません。
カスタムフィールドの値がうまく反映できていないのかと調べてみると、確かに変更されている。では、データベースに反映されていないのかと直接確認しても変化しています。
では、検索条件が間違えているのかと調べてみると、こちらもうまくいっている。ということで、原因が掴めません。がしかし、結果が変化する瞬間がありました。
投稿の内容を保存すると更新される
カスタムフィールドの値を変化させても、検索結果が変化しなかったのですが、そのままその記事を編集画面で編集して保存すると、なんと検索結果が変化しました。これで原因が分かりました。「投稿画面で投稿を保存しないと、検索結果の内容がキャッシュされた状態になる」という事だったのです。
カスタムフィールドとタクソノミーの変更はキャッシュされる
どうやら、カスタムフィールドの内容とタクソノミーの内容は、プログラムで変更しても検索結果がキャッシュされているため、そのままでは変化しないようでした。meta_query
の項目にも、キャッシュに関するパラメーターが存在しています。
しかし、実際に筆者が試したところ、なにか間違えているのかうまくキャッシュがコントロールできません。試行錯誤しましたが諦めて、別の手段で修理・復旧しました。
wp_update_postで投稿を保存で解決
カスタムフィールドの内容を変更してもキャッシュが変わらないため、その直後にwp_update_post
ファンクションを使って、強制的に投稿の内容を変更することにしました。プログラムとしては、次のようになります。
global $post;
update_post_meta(get_the_ID(), 'key', 'value');
wp_update_post($post);
これで無事に検索結果が変化しました。