プラグインのAdvanced Custom Fields (略してAFC)を使用して独自のフィールドを用意することで、カスタムフィールド自体は管理画面で作成し、その出力のみを記述するだけで良くなるため、簡単に機能を拡張することができます。
フィールド値に関連した記述は Advanced Custom Fields のthe_field
と get_field
の2つの関数を使用します。
目次
フィールド値の出力
投稿に入力されているカスタムフィールド値を表示する場合、the_field()
を使用します。
<?php the_field('afc_field'); ?>
表示するフィールド名を変更する場合、 the_field('afc_field')
内のフィールド名 afc_field
を変更して記述します。
フィールド値を取得して出力
投稿に入力されているカスタムフィールド値を取得する場合、 get_field()
を使用します。
<?php $afc_field = get_field('afc_field'); ?>
取得した値を表示する場合 echo
を使用して表示します。
<?php $afc_field = get_field('afc_field'); ?>
<?php echo $afc_field; ?>
フィールド値が空の場合出力を除外
入力されているカスタムフィールド値を get_field()
で取得して、値がない場合 if
で出力を除外します。
<?php
$field = get_field('afc_field');
if($field){echo '<p>'.$field.'</p>';}
?>
以下の書き方でも同様フィールド値が空の場合出力を除外します。
<?php if(get_field('XXX')): ?><?php the_field('XXX'); ?><?php endif; ?>
別の投稿のフィールド値を出力
別の投稿のフィールド値を取得する場合、フィールド名の後にポストIDを指定することでその投稿のフィールド値を取得して、表示することができます。
<?php the_field('afc_field',1234); ?>
上記のように、フィールド名 afc_field
の後の、1234
の箇所に取得したいページIDを記述します。
指定したカテゴリのフィールド値を出力
指定したカテゴリのフィールド値を表示する場合、'category_'
とカテゴリーIDをセットで記述することで、そのカテゴリーのフィールド値を表示させることができます。
<?php
$cat_field = get_field('フイールド名','category_カテゴリID');
if($cat_field){echo $cat_field;}
?>
指定したタグのフィールド値を出力
指定したタグのフィールド値の表示は、'post_tag_'
とタグIDをセットで記述することで、そのタグのフィールド値を表示させることができます。
<?php
$tag_field = get_field('フイールド名','post_tag_タグID');
if($tag_field){echo $tag_field;}
?>
複数のフィールド値を出力
3つのフィールドの値で、全て値があった場合のみ表示するための条件分岐させて表示させます。
<?php if( get_field('フィールドA') and get_field('フィールドB') and get_field('フィールドC') ): ?>
<!--上記3種が入力されている場合表示-->
<p class="hh hh26">参考サイト</p>
<a class="reference table" href="<?php the_field('フィールドA'); ?>" target="_blank" rel="noopener noreferrer"><span class="tbcell refttl">参考</span><span class="tbcell refcite"><?php the_field('フィールドB'); ?><span><?php the_field('フィールドC'); ?></span></span></a>
<?php else: ?>
<?php #条件に当てはまらないので表示なし ?>
<?php endif; ?>
and
の記述を or
に変えて条件を変更させることも可能です。
フィールドの文字列を改行で li タグ出力
カスタムフィールドで「テキストエリア」を選択し、改行は「自動的に段落追加する」を選択。この場合に段落を li
タグで出力するスニペットです。
<ul>
<?php
$fieldData = explode("\n",get_post_meta($post->ID,'カスタムフィールド名',true) );
$i = 0;
foreach ($fieldData as $value){
if ( $value ){
echo '<li>' . $value . '</li>';
}
$i++;
}
?>
</ul>