Webサイト

WordPress で ACF を使用してカスタムフィールドの値を表示する方法

WordPress で ACF を使用してカスタムフィールドの値を表示する方法

WordPress のカスタマイズにおいて、Advanced Custom Fields(ACF)は非常に強力なツールです。これを利用することで、テーマの機能を拡張し、投稿やページにカスタムデータを簡単に追加できます。この記事では、ACF を使用してカスタムフィールドの値を表示する方法について、基本から応用まで詳しく解説します。

基本的なカスタムフィールドの表示

まず、ACF でカスタムフィールドを作成し、それを特定の投稿タイプに割り当てます。例として、フィールド名が example_field のテキストフィールドを想定します。このフィールドの値を投稿ページで表示するには、以下のコードをテーマの適切なファイル(例えば single.php)に挿入します。

<?php
$field_value = get_field('example_field');
if (!empty($field_value)) {
    echo '<div>' . esc_html($field_value) . '</div>';
}
?>

このシンプルなスニペットは、指定したフィールドに値が存在するかをチェックし、値があれば HTML の div 要素として表示します。esc_html() 関数は、セキュリティを確保するために重要です。これにより、XSS(クロスサイトスクリプティング)攻撃を防ぐことができます。

繰り返しフィールドの扱い

より複雑なデータ構造を扱う場合、ACF の繰り返しフィールドが役立ちます。例えば、関連記事のリストなどを投稿に追加したい場合、繰り返しフィールドを使用して各関連記事を個別に管理できます。

<?php
if (have_rows('related_articles')):
    while (have_rows('related_articles')): the_row();
        $post_object = get_sub_field('related_posts');
        if ($post_object):
            $post = $post_object;
            setup_postdata($post);
            echo '<li><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></li>';
            wp_reset_postdata();
        endif;
    endwhile;
endif;
?>

このコードは、related_articles という繰り返しフィールド内で定義された各 related_posts 投稿オブジェクトを取得し、リンク付きのタイトルをリスト形式で表示します。

投稿オブジェクト内のカスタムフィールドの表示

投稿オブジェクト内にカスタムフィールドがある場合、その値を取得するには、投稿IDを使用して get_field() 関数を呼び出します。

<?php
if (have_rows('related_articles')):
    while (have_rows('related_articles')): the_row();
        $post_object = get_sub_field('related_posts');
        if ($post_object):
            $custom_field_value = get_field('custom_field_name', $post_object->ID);
            if (!empty($custom_field_value)) {
                echo '<div>' . esc_html($custom_field_value) . '</div>';
            }
        endif;
    endwhile;
endif;
?>

このスニペットでは、各投稿オブジェクトの custom_field_name というフィールドから値を取得し、それを表示しています。このようにして、複数の階層にわたるデータ構造でも、ACF を使って簡単に管理できます。

繰り返しフィールド内の繰り返しフィールドの表示

より複雑なデータ構造では、繰り返しフィールド内にさらに繰り返しフィールドを持つ場合があります。これは以下のようにして取り扱います。

<?php
if (have_rows('related_articles')):
    while (have_rows('related_articles')): the_row();
        $post_object = get_sub_field('related_posts');
        if ($post_object):
            if (have_rows('inner_repeater_field', $post_object->ID)):
                while (have_rows('inner_repeater_field', $post_object->ID)): the_row();
                    $sub_field_value = get_sub_field('sub_field_name');
                    echo '<li>' . esc_html($sub_field_value) . '</li>';
                endwhile;
            endif;
        endif;
    endwhile;
endif;
?>

このコードでは、外側の related_articles 繰り返しフィールドの各 related_posts 投稿オブジェクトから、さらに inner_repeater_field 繰り返しフィールドを処理しています。各 sub_field_name サブフィールドの値をリスト形式で表示しています。

これらの例を通じて、ACF を使ったWordPressのカスタマイズの可能性を広げることができます。コードの再利用やカスタマイズを進めることで、さまざまなプロジェクトに適用可能な強力なWebサイトを構築することが可能です。