0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WordPressのfront-page.phpでACFの値が取得できなかったときの調査メモ

0
Posted at

しばらく別の仕事で離れていたが、パソコン遊びに帰ってきた。

WordPressでLP形式のトップページを作成している際、
Advanced Custom Fields(ACF)で設定した価格フィールドが front-page.php(トップページ) から取得できない問題に遭遇しました。
編集画面がないので、仕方ない気もします。

最終的には ACFが保存している投稿IDと、テンプレート側で参照している投稿IDが一致していない ことが原因でした。

この記事では

  • 起きていた現象
  • 調査の手順
  • 実際の解決方法
    をまとめます。

環境

  • WordPress
  • Advanced Custom Fields
  • 独自テーマ
  • front-page.php を使用したトップページ

##やりたかったこと

トップページの価格表示を、管理画面から変更できるようにしたい。


発売価格:5,500円
これを ACFのフィールドから管理したい。

ACF設定

フィールドグループ

フィールド名
default_price

ロケーションルール

固定ページ = トップページ

管理画面では次のように入力できる状態にした。

発売価格
5500

テンプレート側のコード

front-page.php

<?php if (get_field('default_price')) : ?>
  <p class="product-price">
    発売価格:<?php the_field('default_price'); ?>円
  </p>
<?php endif; ?>

しかし、画面には何も表示されなかった。

切り分け

まずテンプレートが読み込まれているか確認。

<div>FRONT-PAGE.PHP が読まれています</div>

これは表示されたため、
front-page.php は正常に読み込まれていることが分かった。

次に疑ったこと

ACFが保存している 投稿ID と
テンプレートが参照している 投稿ID が一致していない可能性。

固定ページ編集URLを確認。

/wp-admin/post.php?post=24&action=edit

この場合

post_id = 24

である。

投稿IDを直接指定してみる

<?php
$price = get_field('default_price', 24);
?>

<?php if ($price) : ?>
  <p class="product-price">
    発売価格:<?php echo esc_html($price); ?>円
  </p>
<?php endif; ?>

これで 正常に表示された。

原因

ACFは
post_meta
として 特定の投稿IDに保存される。

しかし front-page.php では
現在の投稿IDが必ずしもその固定ページとは限らない。

そのためget_field('field_name')だけでは値が取得できない場合がある。

解決方法

  • 固定ページを作成、IDを指定して取得する。
  • ACFの編集画面からその固定ページを紐づける
<?php
$price = get_field('default_price', 24);
?>

<?php if ($price) : ?>
  <p class="product-price">
    発売価格:<?php echo number_format((int)$price); ?>円
  </p>
<?php endif; ?>

number_formatを使う理由

管理画面では
5500
のように数字だけ入力し、
表示時に整形する。

number_format((int)$price)

これにより

5500 → 5,500

となる。

まとめ

今回のポイントは次の通り。

  • ACFの値は 投稿IDに紐づく
  • front-page.php は必ずしもその投稿IDを参照していない(そらそうだ)
  • 必要に応じて 投稿IDを指定して get_field() する
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?