概要
has_sub_field
関数は、ACF(Advanced Custom Fields)で作成されたRepeaterまたはFlexible Contentフィールドの行をループする際に、特定のサブフィールドが存在するかどうかを判定するために使用されます。この関数を利用することで、フィールドの存在確認を行い、条件に応じた処理を実行することができます。よく使われる機能には以下のようなものがあります:
- Repeaterフィールドの特定のサブフィールドを確認したい場合
- Flexible Contentフィールド内のカスタムレイアウトに依存した処理を行いたい場合
- 特定の条件に基づいてコンテンツを表示する場合
- 商品ページやカスタム投稿タイプでのフィールドチェック
- エラー処理やデフォルト値の設定に利用
- カスタムクエリでの応答確認の支援
構文
has_sub_field( string $field_name = '' )
パラメータ
$field_name
(string):対象とするサブフィールドの名前。
戻り値
- boolean:指定したサブフィールドが存在する場合は
true
、存在しない場合はfalse
。
使用可能なプラグインバージョン
- ACFバージョン:5.0以降
使用可能なWordPressバージョン
- WordPressバージョン:4.0以降
サンプルコード
サンプルコード1
if( have_rows('my_repeater_field') ):
while ( have_rows('my_repeater_field') ) : the_row();
if( has_sub_field('my_sub_field') ) {
// サブフィールドが存在する場合の処理
echo get_sub_field('my_sub_field');
}
endwhile;
endif;
このサンプルコードは、Repeaterフィールド内のサブフィールドの存在を確認し、存在する場合はその値を出力します。
サンプルコード2
if( have_rows('flexible_content_field') ):
while ( have_rows('flexible_content_field') ) : the_row();
if( 'custom_layout' == get_row_layout() ) {
if( has_sub_field('sub_field_name') ) {
// カスタムレイアウトのサブフィールドを表示
the_sub_field('sub_field_name');
}
}
endwhile;
endif;
このサンプルコードは、Flexible Contentフィールドの特定のレイアウト内でサブフィールドの存在を確認し、表示します。
サンプルコード3
if( have_rows('projects') ):
while ( have_rows('projects') ) : the_row();
if( has_sub_field('project_description') ) {
echo '<p>' . get_sub_field('project_description') . '</p>';
}
endwhile;
endif;
このサンプルコードは、「projects」というRepeaterフィールドの各行に含まれる「project_description」というサブフィールドの存在を確認し、内容を出力します。
サンプルコード4
if ( have_rows('team_members') ) {
while ( have_rows('team_members') ) {
the_row();
if ( has_sub_field('photo') ) {
$photo = get_sub_field('photo');
echo "<img src='$photo' alt='Team Member'>";
}
}
}
このサンプルコードは、チームメンバーのRepeaterフィールド内で「photo」というサブフィールドが存在するか確認し、存在すれば画像を表示します。
サンプルコード5
if( have_rows('testimonials') ):
while ( have_rows('testimonials') ) : the_row();
if( has_sub_field('client_name') ) {
$client_name = get_sub_field('client_name');
echo "<h4>$client_name</h4>";
}
endwhile;
endif;
このサンプルコードは、推薦のRepeaterフィールド内で「client_name」というサブフィールドが存在するかどうかを確認し、存在すればその名前を表示します。
この関数のアクションでの使用可能性
アクション | 使用可否 |
---|---|
mu_plugin_loaded | |
registered_post_type | |
plugins_loaded | |
wp_roles_init | |
setup_theme | |
after_setup_theme | |
set_current_user | |
init | |
register_sidebar | |
wp_loaded | |
send_headers | |
parse_query | |
pre_get_posts | |
wp | |
template_redirect | |
get_header | |
wp_head |