wordpressをカスタマイズするときに、よく使うプラグインが「advanced custom fields」です。
http://komodo.arrow.jp/wp/614
通常だと、タイトル・カテゴリ・タグ・本文・抜粋を入力するwordpressですが、
全部の投稿に画像を複数付けたいとか、画像と1行文をセットにするとか、
そんな要望がでてくることも多々あると思います。
そういうときに便利なのか「advanced custom fileds」です。
wordpressの記事入力画面の入力項目を好きなように作れます。
ただ、1つ不便だなと思うところがあります。
このプラグインは、wordpressのcustom filedを使って実現されているんですが、
custom filedに入力したデータは、プレビュー機能で見れないんですよね。
公開されている記事を編集する場合は、公開済の情報が表示されてしまいます。
せっかく、データを入力しやすいようにカスタマイズしても、プレビューでできないのは残念。
そこで、「advanced custom fields」で入力した情報を、プレビューできるようにしました。
テンプレートのfunctions.phpに以下を書けば、OKです。
// カスタムフィールドをプレビュー対象にする
// preview用に保存された下書き情報(post)のIDを取得する
function get_preview_id($postId)
{
global $post;
$previewId = 0;
if (($post->ID == $postId) && $_GET['preview'] == true && ($postId == url_to_postid($_SERVER['REQUEST_URI']))) {
// プレビュー表示の際に、自動保存されたpostの下書き情報を取得する
$preview = wp_get_post_autosave($postId);
if ($preview != false) { $previewId = $preview->ID; }
}
return $previewId;
}
function get_preview_postmeta($metaValue, $postId, $metaKey, $single)
{
// プレビュー表示のときにmeta情報(custom fileds情報)を、
// プレビュー用のmeta情報に置き換える
if ($previewId = get_preview_id($postId)) {
if ($postId != $previewId) {
$metaValue = get_post_meta($previewId, $metaKey, $single);
}
}
return $metaValue;
}
add_filter('get_post_metadata', 'get_preview_postmeta', 10, 4);
// 下書き情報を作成するときに、対応するcustom filed情報も作成する
// プレビューの際には、この時作ったcustom filed情報を読み出す
// (読み出しているのが、get_preview_postmetaの部分)
function save_preview_postmeta($postId)
{
global $wpdb, $acf; // $acfがadvanced custom filedsのglobal 変数
if (wp_is_post_revision($postId)) {
if (count($_POST['fields']) != 0) {
foreach ($_POST['fields'] as $key => $value) {
$field = $acf->get_acf_field($key);
if (count(get_metadata('post', $postId, $field['name'], $value)) != 0) {
update_metadata('post', $postId, $field['name'], $value);
update_metadata('post', $postId, "_" . $field['name'], $field['key']);
} else {
add_metadata('post', $postId, $field['name'], $value);
add_metadata('post', $postId, "_" . $field['name'], $field['key']);
}
}
}
do_action('save_preview_postmeta', $postId);
}
}
add_action('wp_insert_post', 'save_preview_postmeta');
調べるのに時間かかったので、忘備録として。
このプログラムは、こちらの記事を参考に、advanced custom filedsに対応させて頂きました。
http://www.warna.info/archives/2502/
※追記(2013/7/16)
最新版のプラグインはプレビューに対応しています。
現在は、上記の対応は入れる必要はありません。