ACF(Advanced Custom Fields)の使い方
オプションページの作成
functions.php
if ( function_exists( 'acf_add_options_page' ) ) {
acf_add_options_page(
array(
'page_title' => '例会案内注意事項',
'menu_title' => '例会案内注意事項',
'menu_slug' => 'meeting-archive-notes',
'capability' => 'edit_posts',
'parent_slug' => 'edit.php?post_type=meeting-archive',
)
);
}
テンプレートの出力箇所
<?php
$meeting_notes = get_option( 'options_meeting_notes' );
if ( $meeting_notes ) {
echo nl2br( esc_html( $meeting_notes ) );
}
?>
USRE ROLE EDITOR と使う場合の注意点
例えば ユーザーID2 のユーザーが編集できるようにしたいが ユーザーID2 には通常の投稿(edit_posts)を編集する権限が無い場合は下記のように設定する。
//カスタム投稿登録
function my_meeting_archive_post() {
register_post_type(
'meeting-archive',
'capability_type' => array( 'meeting-archive', 'meeting-archives' ),
'map_meta_cap' => true,
)
);
}
add_action( 'init', 'my_meeting_archive_post' );
//ACFのオプション
if ( function_exists( 'acf_add_options_page' ) ) {
acf_add_options_page(
array(
'page_title' => '例会案内注意事項',
'menu_title' => '例会案内注意事項',
'menu_slug' => 'meeting-archive-notes',
'capability' => 'edit_meeting-archives', //←これ
'parent_slug' => 'edit.php?post_type=meeting-archive',
)
);
}
テキスト
テンプレート記述例
$school = get_field( 'school' );
if ( $school ) {
echo '<p>' . esc_html( $school ) . '</p>';
}
テキストエリア
$text = get_the_author_meta( 'profile_text' );
echo wp_kses_post( nl2br( $text ) );
画像
返り値は画像IDを選択する。 IDにしておけばカスタムメディアサイズを利用したり、画像サイズ指定ができる。
ALTをタイトルなどで自動設定する場合
$img = get_field( 'foobar' );
$size = 'medium_large';
$imgsrc = wp_get_attachment_image_src( $img, $size );
if ( $img ) :
?>
<figure>
<img src="<?php echo esc_url( $imgsrc[0] ); ?>" width="<?php echo esc_attr( $imgsrc[1] ); ?>" height="<?php echo esc_attr( $imgsrc[2] ); ?>" alt="<?php the_title_attribute(); ?>のイメージ">
</figure>
<?php else : ?>
<figure><img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/no-img.png" alt=""></figure>
手動でALTを設定する場合
srcset にも対応されます。
$img = get_field( 'foobar' );
$size = 'medium_large';
if ( $img ) :
?>
<figure><?php echo wp_get_attachment_image( $img, $size ); ?></figure>
<?php else : ?>
<figure><img src="<?php echo esc_url( get_template_directory_uri() ); ?>/assets/images/no-img.png" alt=""></figure>
テンプレート記述例
フィールド名 = product_thumb
<ul>
<?php while ($products-> have_posts()) : $products->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php if( get_field('product_thumb')): ?>
<?php
$imgid = get_field('product_thumb');
$img = wp_get_attachment_image_src( $imgid , 'my_product_thumb' ); ?>
?>
<img src="<?php echo $img[0]; ?>" width="<?php echo $img[1]; ?>" height="<?php echo $img[2]; ?>" alt="<?php the_title_attribute(); ?>">
<?php else: ?>
<img src="/images/common/noimage100_100.gif" alt="<?php the_title(); ?>">
<?php endif; ?></a></li>
<?php endwhile; ?>
</ul>
その他テンプレ―トへの記述例色々
<?php if( have_rows('faq') ): ?>
<dl class="faq-list">
<?php while( have_rows('faq') ): the_row(); ?>
<dt><?php the_sub_field('question'); ?></dt>
<dd><?php the_sub_field('answer'); ?></dd>
<?php endwhile; ?>
</dl>
<?php else : ?>
<p>現在、表示する質問がありません。</p>
<?php endif; ?>
繰り返しフィールド入れ子
<?php
$args = array(
'child_of' => $post->ID,
);
$mypages = get_pages( $args ); ?>
<?php foreach( $mypages as $page ): ?>
<?php if( have_rows('document_set', $page->ID)): ?>
<h4 class="title-a-01" id="<?php echo $page->post_name; ?>"><?php echo $page->post_title; ?></h4>
<?php
$content_child = get_page($page->ID);
echo $content_child -> post_content;
?>
<table class="download-table">
<thead>
<tr>
<th>書類名</th>
<th>ダウンロード</th>
<th>備考欄</th>
</tr>
</thead>
<?php while( have_rows('document_set', $page->ID)): the_row(); ?>
<tr>
<td><?php $document_name = get_sub_field('document_name', $page->ID);
if( $document_name ): echo $document_name; else: echo ' ';
endif; ?></td>
<td><?php if(have_rows('document', $page->ID)): ?>
<ul>
<?php while( have_rows('document', $page->ID)): the_row(); ?>
<li><a href="/assets/images/download/<?php the_sub_field('file_url', $page->ID); ?>" class="icon-before"><?php the_sub_field('text', $page->ID); ?></a></li>
<?php endwhile; ?>
</ul>
<?php else: echo ' '; endif; ?></td>
<td><?php $remarks = get_sub_field('remarks', $page->ID);
if( $remarks ): echo $remarks; else: echo ' ';
endif; ?></td>
</tr>
<?php endwhile; ?>
</table>
<?php endif; ?>
<?php endforeach; ?>