原因を探ったのですが、
——————————————————-
カスタムフィールドに入力したものは「変更をプレビュー」で公開側に反映される
——————————————————-
ということがわかりました。
本文欄に入力したものは「変更をプレビュー」をしても公開側に反映されていませんでした。
本文欄に入るデータとカスタムフィールドに入るデータはどう違うのでしょうか?
ご存じの方いらっしゃいませんでしょうか?
tomediaさん、こんにちは。
本文欄とカスタムフィールドのデータは、保存されるデータベースのテーブルが異なります。
プレビューは、オートセーブ機能を利用して、最新のデータを一旦保存し、それを表示させているのですが、オートセーブ機能は、記事欄が属するpostsテーブルのみを対象としているため、カスタムフィールドのデータが保存されるpostmetaテーブルは対象とされていません。
このため、カスタムフィールドは常に最新のデータが表示されてしまうことになります。
余談になりますが、これと同じくして、リビジョンのデータを戻した場合でも、カスタムフィールドが対象外になってしまうという問題もあります。
データベーステーブルの種類や、構造については、codexのデータベース概要を参照ください。
本文はリビジョンで複数版管理されますが、
カスタムフィールドの入力値は投稿のリビジョンには紐付けされず
最新版の投稿にのみ紐付けされているからです。
カスタムフィールドの値を更新すると update_post_meta() が呼ばれます。
そこで、投稿の ID がリビジョンにならないように操作しています。
function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '') {
// make sure meta is added to the post, not a revision
if ( $the_post = wp_is_post_revision($post_id) ) // ここでリビジョン判定!
$post_id = $the_post;
return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value);
}
遅くなりまして、すみません。
色々探っていたのですが、
kzさんから頂いた
post.phpのupdate_post_meta()を何とかしようと思いましたが、
自分にはその知識が乏しく・・・。
上記のご意見をもっと研究して、何とか解決策を見いだします。
jim912さん、kzさんありがとうございました。