WordPressのカスタムフィールドとは?ACFとfunction.phpどちらで実装したらよい?

wordpress

カスタムフィールドとは?なぜ標準機能だけでは足りないのか

カスタムフィールドとは「WordPressの投稿画面に、自分で自由に追加できる専用の入力項目」のことです。

通常、WordPressの投稿画面には「タイトル」と「本文(エディタ)」しかありません。しかし、たとえば不動産サイトなどでは「家賃」や「最寄駅」などの情報を決まった形式で載せたいはずです。

これらをすべて「本文」に手入力すると、記事ごとにレイアウトがバラバラになったり、クライアントが誤ってデザインを崩してしまったりするリスクがあります。

カスタムフィールドを使うと、決まった枠(入力欄)があるため、迷わず入力できたり、入力したデータはsingle.phpなどのテンプレートの決まった場所に自動表示されるため、全記事でデザインが完璧に揃います。

Advanced Custom Fields(ACF)でできること

画面上でポチポチと項目を作れるため、直感的でスピーディです。チェックボックスや画像選択、デイトピッカーなど、複雑なUIも簡単に作れます。

複雑な項目でなければ、無料で導入することができます。

※pro版との違いはまた別記事でご紹介します。

functions.phpで実装じゃだめなの?

自力でfunction.phpに項目追加のコーディングはメリットもありますが、大量のコードを書く必要があり、時間がかかるため多くのプロはACFを使っているのが現実です。

1つの入力項目を作るために必要なコードは、以下のとおりです。

/** * 1. 投稿画面に入力欄(メタボックス)を作成 */

function add_my_custom_fields() { add_meta_box( ‘my_post_setting’, // ID ‘記事の補足設定’, // 画面に表示されるタイトル ‘display_my_custom_fields’, // 表示用関数の名前 ‘post’, // 投稿タイプ(post = ブログ) ‘normal’, // 表示場所 ‘high’ // 優先度 ); } add_action(‘add_meta_boxes’, ‘add_my_custom_fields’);

/** * 2. 入力欄のHTMLを表示 */

function display_my_custom_fields($post) { // 保存されている値を取得 $read_time = get_post_meta($post->ID, ‘read_time’, true); ?> <p> <label for=”read_time”>読了時間の目安(分):</label> <input type=”text” name=”read_time” id=”read_time” value=”<?php echo esc_attr($read_time); ?>” style=”width:100px;”> 分 </p> <?php }

/** * 3. データを保存する処理 */

function save_my_custom_fields($post_id) { if (isset($_POST[‘read_time’])) { update_post_meta($post_id, ‘read_time’, sanitize_text_field($_POST[‘read_time’])); } } add_action(‘save_post’, ‘save_my_custom_fields’);

徹底比較表

現場での使い分けは、だいたいこんな感じです。

項目ACF(プラグイン)functions.php(自力)
向いているケース複雑な項目(画像、チェックボックス、地図など)が多い時シンプルなテキスト項目が1〜2個だけの時
開発スピード圧倒的に速い時間がかかる
メンテナンス性誰でも管理画面から直せるコードが読める人しか直せない
パフォーマンスわずかに重くなる可能性がある最速・最軽量

この記事のまとめ

  • カスタムフィールドとは、標準の投稿画面に自分で自由に追加できる専用の入力項目のこと。
  • 複雑な項目をミスなく、スピーディに実装して運用性を高めるなら「ACF」が圧倒的に便利。
  • シンプルな項目に絞り、サイトの軽量化とコードによる厳格な管理を優先するなら「functions.php」が最適。