カスタムフィールドの値もプレビューを出来るようにする
- 2018.03.17
- CMS Wordpress
- Advanced Custom Fields, プレビュー
Advanced Custom Fieldsで挿入した値がプレビューに反映されない場合、下記のコードをfunction.phpに設定する。
※バージョンで解消されるかも
// カスタムフィールドの内容をプレビューする
function get_preview_id($postId) {
global $post;
$previewId = 0;
if ( isset($_GET['preview'])
//&& ($post->ID == $postId)
&& $_GET['preview'] == true
&& ($postId == url_to_postid($_SERVER['REQUEST_URI']))
) {
$preview = wp_get_post_autosave($postId);
if ($preview != false) { $previewId = $preview->ID; }
}
return $previewId;
}
add_filter('get_post_metadata', function($meta_value, $post_id, $meta_key, $single) {
if ($preview_id = get_preview_id($post_id)) {
if ($post_id != $preview_id) {
$meta_value = get_post_meta($preview_id, $meta_key, $single);
}
}
return $meta_value;
}, 10, 4);
add_action('wp_insert_post', function ($postId) {
global $wpdb;
if (wp_is_post_revision($postId)) {
if (count($_POST['fields']) != 0) {
foreach ($_POST['fields'] as $key => $value) {
$field = get_field($key);
if ( !isset($field['name']) || !isset($field['key']) ) continue;
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);
}
});
参考サイト
-
前の記事
カスタム投稿アーカイブでカスタム投稿名を取得する 2018.03.15
-
次の記事
管理画面にスタイルシートを設定する 2018.03.17