Advanced Custom Fieldsで追加したカスタムフィールドの値がプレビューに反映されない場合の対処法

Advanced Custom Fieldsで追加したカスタムフィールドの値がプレビューに反映されない場合の対処法

Advanced Custom Fieldsで追加したカスタムフィールドの値がプレビューに反映されない場合の対処法

Advanced Custom Fields(以下、ACF)で追加したカスタムフィールドに入力した値が、プレビューで表示されない場合の対処法をご紹介いたします。

通常はACFで追加したカスタムフィールドは、何もしなくてもプレビューに表示されるのですが、先日対応した案件でなぜか過去記事のみプレビューに反映されないケースがありました。

今回ご紹介する対処で、ACFのカスタムフィールドが無事プレビューに反映されるようになりました。

ACFで追加したカスタムフィールドの値がプレビューに反映されない場合の対処法

今回ご紹介する対処法は、こちらの記事を参考にさせていただきました。

ACFのカスタムフィールドの値がプレビューに反映されない場合は、functions.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);
  }
});

あとがき

ACFのカスタムフィールドがプレビューに反映されない時は、ご紹介した対処を試してみてください。

個人的にはカスタムフィールドは公開時に反映されていれば良くないかなとは思いますが、クライアントワークではそうも言っていられないですしね(^^;

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です