WordPressのプレビューでAdvanced Custom Fieldsの値が表示されないときに試してみること

WordPressプラグインAdvanced Custom Fields で入力した値が、下書きのプレビュー時に表示されない問題の解決法です。

WordPressのカスタムフィールドプラグインのデファクトスタンダードとも言えるAdvanced Custom Fields。通称ACF。

もはやこれなしでサイト制作は考えられないほどに重宝していますが、ひとつだけ問題が。それは下書き時のプレビュー表示でACFの値が表示されないことがある、ということ。

というわけで、調べに調べた結果たどり着いたのがこちらの公式ページ。

ぶっちゃけ、これで悩んでる人多いと思いますので、日本語ページ代表ということで共有しておきます。

Preview solution ! – ACF Support

このコードをfunctions.phpなどに貼り付けたところ、無事解決しました。

function fix_post_id_on_preview($null, $post_id) {
    if (is_preview()) {
        return get_the_ID();
    }
    else {
        $acf_post_id = isset($post_id->ID) ? $post_id->ID : $post_id;

        if (!empty($acf_post_id)) {
            return $acf_post_id;
        }
        else {
            return $null;
        }
    }
}
add_filter( 'acf/pre_load_post_id', 'fix_post_id_on_preview', 10, 2 );

やっていることは、プレビューを表示しているときに記事IDを返却しているだけ。つまり、プレビュー時に記事IDの返却に問題がある、ということでしょう。

おそらく、ACFのバグなのですが、ACFバージョン6.2.5現在で未だ解決しておらず。というわけでバグFixされるまではこちらを参考にしてみてください。