単一行テキスト
文字列<?php echo esc_html( CFS()->get( 'text' ) ); ?>Output reference
Custom Field Suite (CFS) と atshift Fields で新たに追加した各フィールドの出力リファレンスです。ここでは、例としてフィールド名を field_name としています。実際のフィールド名へ置き換え、出力先に合ったエスケープを行ってください。
Text and values
オレンジ文字の部分は設定したフィールド名称と入れ替えます。緑の文字はエスケープです。
<?php echo esc_html( CFS()->get( 'text' ) ); ?>HTMLを許可しない安全な表示
<?php
$value = CFS()->get( 'textarea' );
echo nl2br( esc_html( $value ) );
?>改行をHTMLの改行として表示し、入力されたHTMLタグは文字として安全に表示する例です。
リンクなどのHTMLを許可して表示
<?php
$value = CFS()->get( 'textarea' );
echo wp_kses_post( wpautop( $value ) );
?>textareaに入力されたリンクなどのHTMLを許可して表示する例です。許可するHTMLを限定したい場合は wp_kses() の許可リストを使います。
<?php echo wp_kses_post( CFS()->get( 'wysiwyg' ) ); ?>リッチエディタは本文用のHTMLを含む文字列として返ります。リンク、段落、リストなど、WordPress投稿本文で一般的に許可されるHTMLを残して表示する場合は wp_kses_post() を使います。ショートコードや埋め込みなど本文と同じ処理を通したい場合は、用途を確認したうえで apply_filters( 'the_content', CFS()->get( 'wysiwyg' ) ) を使います。
電話番号のみ表示
<?php echo esc_html( CFS()->get( 'phone' ) ); ?>電話をかけるリンクとして表示
<?php $phone = CFS()->get( 'phone' ); ?>
<a href="tel:<?php echo esc_attr( $phone ); ?>">
<?php echo esc_html( $phone ); ?>
</a>メールアドレスのみ表示
<?php echo esc_html( antispambot( CFS()->get( 'email' ) ) ); ?>メールを送るリンクとして表示
<?php $email = CFS()->get( 'email' ); ?>
<a href="mailto:<?php echo esc_attr( antispambot( $email ) ); ?>">
<?php echo esc_html( antispambot( $email ) ); ?>
</a>通常のリンクとして表示
<?php $url = CFS()->get( 'url' ); ?>
<a href="<?php echo esc_url( $url ); ?>">リンク</a>SNSなどのURLを判定してアイコン付きで表示
<?php
$url = CFS()->get( 'url' );
// URLのホスト名を見て、表示するアイコンとラベルを切り替えます。
// icon_classはFont Awesomeの例です。SVGや画像アイコンに置き換えても構いません。
$host = strtolower( (string) wp_parse_url( $url, PHP_URL_HOST ) );
$host = preg_replace( '/^www\./', '', $host );
$service = 'website';
$icon_class = 'fa-solid fa-link';
$label = 'Webサイト';
if ( false !== strpos( $host, 'instagram.com' ) ) {
$service = 'instagram';
$icon_class = 'fa-brands fa-instagram';
$label = 'Instagram';
} elseif ( false !== strpos( $host, 'x.com' ) || false !== strpos( $host, 'twitter.com' ) ) {
$service = 'x';
$icon_class = 'fa-brands fa-x-twitter';
$label = 'X';
} elseif ( false !== strpos( $host, 'facebook.com' ) ) {
$service = 'facebook';
$icon_class = 'fa-brands fa-facebook-f';
$label = 'Facebook';
} elseif ( false !== strpos( $host, 'youtube.com' ) || false !== strpos( $host, 'youtu.be' ) ) {
$service = 'youtube';
$icon_class = 'fa-brands fa-youtube';
$label = 'YouTube';
} elseif ( false !== strpos( $host, 'line.me' ) || false !== strpos( $host, 'lin.ee' ) ) {
$service = 'line';
$icon_class = 'fa-brands fa-line';
$label = 'LINE';
}
if ( $url ) :
?>
<a class="social-link social-link--<?php echo esc_attr( $service ); ?>"
href="<?php echo esc_url( $url ); ?>"
target="_blank"
rel="noopener">
<i class="<?php echo esc_attr( $icon_class ); ?>" aria-hidden="true"></i>
<span><?php echo esc_html( $label ); ?></span>
</a>
<?php endif; ?>URLフィールドは保存値としてURL文字列を返します。出力時にドメインを判定すれば、SNSリンクだけアイコンやCSSクラスを切り替えられます。
数値のみ表示
<?php echo esc_html( CFS()->get( 'number' ) ); ?>kgなどの単位を付けて表示
<?php
$weight = CFS()->get( 'weight' );
// 0も有効な値として表示するため、empty()では判定しません。
if ( null !== $weight && '' !== (string) $weight ) :
?>
<span class="measurement">
<span class="measurement-value"><?php echo esc_html( number_format_i18n( (float) $weight, 1 ) ); ?></span>
<span class="measurement-unit">kg</span>
</span>
<?php endif; ?>単位は数値フィールドの保存値に含めず、テンプレート側で固定表示すると計算や並び替えに使いやすくなります。
保存された形式のまま表示
<?php echo esc_html( CFS()->get( 'date' ) ); ?>曜日を付けて表示
<?php
$date = CFS()->get( 'date' );
if ( $date ) {
echo esc_html( wp_date( 'Y年n月j日(D)', strtotime( $date ) ) );
}
?>wp_date() の曜日はWordPressのサイト言語に合わせて表示されます。保存形式に応じてフォーマットを調整してください。
24時間表記
<?php
$time = CFS()->get( 'time' );
if ( $time ) {
echo esc_html( wp_date( 'H:i', strtotime( $time ) ) );
}
?>AM / PM表記
<?php
$time = CFS()->get( 'time' );
if ( $time ) {
echo esc_html( wp_date( 'g:i A', strtotime( $time ) ) );
}
?><?php $color = sanitize_hex_color( CFS()->get( 'color' ) ); ?>
<span style="color:<?php echo esc_attr( $color ); ?>">色付き文字</span>Choices
オレンジ文字の部分は設定したフィールド名称と入れ替えます。緑の文字はエスケープです。
<?php foreach ( (array) CFS()->get( 'select' ) as $value ) : ?>
<span><?php echo esc_html( $value ); ?></span>
<?php endforeach; ?>単一選択の設定でも配列で返ります。
<ul>
<?php foreach ( (array) CFS()->get( 'checkbox' ) as $value ) : ?>
<li><?php echo esc_html( $value ); ?></li>
<?php endforeach; ?>
</ul><?php echo esc_html( CFS()->get( 'radio' ) ); ?><?php if ( CFS()->get( 'true_false' ) ) : ?>
<span>有効</span>
<?php endif; ?><?php
$choice = CFS()->get( 'conditional_choice' );
?>
<?php if ( 'select1' === $choice ) : ?>
<div>
<p><?php echo esc_html( CFS()->get( 'field1' ) ); ?></p>
<p><?php echo esc_html( CFS()->get( 'field2' ) ); ?></p>
</div>
<?php elseif ( 'select2' === $choice ) : ?>
<div>
<p><?php echo esc_html( CFS()->get( 'field3' ) ); ?></p>
<p><?php echo esc_html( CFS()->get( 'field4' ) ); ?></p>
</div>
<?php endif; ?>条件分岐グループのフィールド名で現在の選択値を取得し、その値に応じて子フィールドを出力します。PHPタグの間には、見出し・画像・文章などのHTMLを自由に追加できます。非表示側の値も保持されるため、子フィールドだけを無条件で出力しないようにしてください。
Links and media
オレンジ文字の部分は設定したフィールド名称と入れ替えます。緑の文字はエスケープです。
<?php
$link = CFS()->get( 'hyperlink' ); // 「PHP Array」設定
if ( ! empty( $link['url'] ) ) :
?>
<a href="<?php echo esc_url( $link['url'] ); ?>"
target="<?php echo esc_attr( $link['target'] ?? '_self' ); ?>">
<?php echo esc_html( $link['text'] ?: $link['url'] ); ?>
</a>
<?php endif; ?>返り値設定が「HTML」の場合はリンクHTMLが返ります。細かく制御できる「PHP Array」がおすすめです。
<?php $file_url = CFS()->get( 'file' ); ?>
<a href="<?php echo esc_url( $file_url ); ?>">ダウンロード</a>URL返却でも wp_check_filetype() で拡張子とMIMEタイプを推定できます。添付ファイル情報をより確実に扱う場合はID返却を選びます。
<?php
$attachment_id = (int) CFS()->get( 'file' );
echo wp_get_attachment_image( $attachment_id, 'large' );
?>返り値はフィールドの「Return Value」設定でURLまたはIDに変わります。
<?php
// ファイルフィールドの「Return Value」は「Attachment ID」に設定します。
$attachment_id = (int) CFS()->get( 'file' );
$file_url = wp_get_attachment_url( $attachment_id );
$mime_type = get_post_mime_type( $attachment_id );
$file_type = wp_check_filetype( $file_url );
$extension = strtolower( $file_type['ext'] ?? '' );
$label = get_the_title( $attachment_id ) ?: basename( (string) $file_url );
// 初期値は、どの種別にも当てはまらない汎用ファイル用です。
$icon_label = 'FILE';
$icon_class = 'file';
// 拡張子やMIMEタイプに応じて、表示ラベルとCSSクラスを切り替えます。
if ( 'pdf' === $extension ) {
$icon_label = 'PDF';
$icon_class = 'pdf';
} elseif ( 0 === strpos( (string) $mime_type, 'image/' ) ) {
$icon_label = 'IMG';
$icon_class = 'image';
} elseif ( 0 === strpos( (string) $mime_type, 'audio/' ) ) {
$icon_label = 'AUDIO';
$icon_class = 'audio';
} elseif ( 0 === strpos( (string) $mime_type, 'video/' ) ) {
$icon_label = 'VIDEO';
$icon_class = 'video';
} elseif ( in_array( $extension, array( 'zip', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' ), true ) ) {
$icon_label = strtoupper( $extension );
$icon_class = $extension;
}
if ( $file_url ) :
?>
<!-- data属性を出しておくと、CSSやJavaScript側でもファイル種別を利用できます。 -->
<a class="download-link download-link--<?php echo esc_attr( $extension ); ?>"
href="<?php echo esc_url( $file_url ); ?>"
data-file-ext="<?php echo esc_attr( $extension ); ?>"
data-file-mime="<?php echo esc_attr( $mime_type ); ?>">
<!-- このspanをSVGやFont Awesomeなど、サイトのアイコン表示に差し替えます。 -->
<span class="file-icon file-icon--<?php echo esc_attr( $icon_class ); ?>" aria-hidden="true">
<?php echo esc_html( $icon_label ); ?>
</span>
<span><?php echo esc_html( $label ); ?></span>
</a>
<?php endif; ?>PDF、画像、音声、動画、Officeファイルなどを分岐して、種別ごとに表示ラベルやCSSクラスを変える例です。data-file-ext や data-file-mime も出しておくと、CSSやJavaScript側でもファイル種別を扱いやすくなります。
返り値はフィールドの「Return Value」設定で変わります。Image Data は画像ID、選択サイズのURL、thumbnail_url、large_url、full_url、modal_url、alt、caption、各サイズ情報を含む配列です。Attachment IDs はID配列、Image URLs はURL配列、Gallery HTML は生成済みHTMLを返します。
Image Data返却で自前出力
<?php foreach ( (array) CFS()->get( 'gallery' ) as $image ) : ?>
<figure>
<a href="<?php echo esc_url( $image['modal_url'] ?? $image['full_url'] ?? $image['url'] ?? '' ); ?>"
data-gallery-item
data-caption="<?php echo esc_attr( $image['caption'] ?? '' ); ?>">
<img src="<?php echo esc_url( $image['url'] ?? '' ); ?>"
alt="<?php echo esc_attr( $image['alt'] ?? '' ); ?>">
</a>
<?php if ( ! empty( $image['caption'] ) ) : ?>
<figcaption><?php echo esc_html( $image['caption'] ); ?></figcaption>
<?php endif; ?>
</figure>
<?php endforeach; ?>Gallery HTML返却でデフォルトHTMLを利用
<?php
$allowed = wp_kses_allowed_html( 'post' );
$allowed['div']['data-columns'] = true;
$allowed['div']['style'] = true;
$allowed['figure'] = array( 'class' => true );
$allowed['figcaption'] = array();
$allowed['a']['data-atshift-cfs-gallery-item'] = true;
$allowed['a']['data-image-id'] = true;
$allowed['a']['data-full-url'] = true;
$allowed['a']['data-caption'] = true;
$allowed['a']['data-alt'] = true;
echo wp_kses( CFS()->get( 'gallery' ), $allowed );
?>モーダルや独自のスライダーを作る場合は、Image Data返却を選ぶと自由に組み立てやすくなります。Gallery HTML返却では、画像リンクにモーダル向けの data-atshift-cfs-gallery-item と関連data属性が付きます。
<?php
// wp_kses() で出力を許可するHTMLタグと属性を設定します。
// true は、その属性の使用を許可する指定です。
$allowed = array(
'div' => array( 'class' => true ), // divタグとclass属性を許可
'span' => array( 'class' => true ), // spanタグとclass属性を許可
'pre' => array(), // preタグを許可(属性は許可しない)
'code' => array( 'class' => true ), // codeタグとclass属性を許可
'button' => array( // buttonタグと以下の属性を許可
'type' => true, 'class' => true, // type・class属性
'data-label' => true, 'data-copied' => true, // data属性
),
);
echo wp_kses( CFS()->get( 'code_view' ), $allowed );
?>ショートコードの実行結果を表示
<?php echo CFS()->get( 'form_shortcode' ); ?>保存されたショートコード文字列を確認
<?php
$shortcode = CFS()->get( 'form_shortcode', false, array( 'format' => 'raw' ) );
echo esc_html( $shortcode );
?>CFS()->get() は保存されたショートコードを実行した結果を返します。ショートコード入力のロール制御は投稿編集画面で入力欄を表示するかどうかの制御で、保存済みの値をテーマで出力するときには別途そのロールを求めません。出力するショートコードは信頼できるものに限定し、必要に応じてショートコード側または wp_kses() で許可するHTMLを調整してください。
許可された iframe 埋め込みを表示
<?php
// 埋め込みコードフィールドは、保存時に許可された埋め込み元の iframe だけを残します。
// 出力時もiframeに必要なタグと属性だけを許可します。
$allowed = array(
'iframe' => array(
'src' => true,
'width' => true,
'height' => true,
'title' => true,
'class' => true,
'style' => true,
'loading' => true,
'allow' => true,
'allowfullscreen' => true,
'frameborder' => true,
'referrerpolicy' => true,
'aria-label' => true,
),
);
echo wp_kses( CFS()->get( 'embed_code' ), $allowed );
?>Google Maps、YouTube、Vimeo、OpenStreetMap、Google カレンダー、Google フォーム、Spotify、SoundCloud など、フィールド設定で許可した iframe 埋め込み元を表示するためのフィールドです。script を使用する埋め込みコードは対象外です。
Repeating values
オレンジ文字の部分は設定したフィールド名称と入れ替えます。緑の文字はエスケープです。
<?php foreach ( (array) CFS()->get( 'items' ) as $row ) : ?>
<article>
<h3><?php echo esc_html( $row['title'] ?? '' ); ?></h3>
<p><?php echo nl2br( esc_html( $row['description'] ?? '' ) ); ?></p>
</article>
<?php endforeach; ?>各行はサブフィールド名をキーにした配列です。サブフィールドの種類に合わせて個別にエスケープします。
<?php foreach ( (array) CFS()->get( 'sections' ) as $section ) : ?>
<section>
<h2><?php echo esc_html( $section['heading'] ?? '' ); ?></h2>
<ul>
<?php foreach ( (array) ( $section['items'] ?? array() ) as $item ) : ?>
<li>
<strong><?php echo esc_html( $item['title'] ?? '' ); ?></strong>
<p><?php echo nl2br( esc_html( $item['description'] ?? '' ) ); ?></p>
</li>
<?php endforeach; ?>
</ul>
</section>
<?php endforeach; ?>sections が親ループ、親ループ内の items が子ループです。子ループは CFS()->get() ではなく、親行の配列から取得します。
WordPress native
標準カテゴリー名を表示
<?php
$terms = get_the_terms( get_the_ID(), 'category' );
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) echo esc_html( $term->name );
}
?>標準カテゴリーをリンク付きで表示
<?php
$terms = get_the_terms( get_the_ID(), 'category' );
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
$url = get_term_link( $term );
if ( ! is_wp_error( $url ) ) {
echo '<a href="' . esc_url( $url ) . '">' . esc_html( $term->name ) . '</a>';
}
}
}
?>グローバルカテゴリー名を表示(Shared Taxonomy)
<?php
$terms = get_the_terms( get_the_ID(), 'global_category' ); // 実際のtaxonomy名へ変更
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) echo esc_html( $term->name );
}
?>グローバルカテゴリーをリンク付きで表示(Shared Taxonomy)
<?php
$terms = get_the_terms( get_the_ID(), 'global_category' ); // 実際のtaxonomy名へ変更
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
$url = get_term_link( $term );
if ( ! is_wp_error( $url ) ) {
echo '<a href="' . esc_url( $url ) . '">' . esc_html( $term->name ) . '</a>';
}
}
}
?>投稿カテゴリー (標準 / グローバル) はCFS専用メタではなく、選択したtaxonomyのWordPressタームとして保存されます。テーマ側では get_the_terms() など標準テンプレート関数で扱うのが基本です。
タグ名を表示
<?php
$terms = get_the_terms( get_the_ID(), 'post_tag' );
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) echo esc_html( $term->name );
}
?>タグをリンク付きで表示
<?php
$terms = get_the_terms( get_the_ID(), 'post_tag' );
if ( $terms && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
$url = get_term_link( $term );
if ( ! is_wp_error( $url ) ) {
echo '<a href="' . esc_url( $url ) . '">' . esc_html( $term->name ) . '</a>';
}
}
}
?><?php
if ( has_post_thumbnail() ) {
the_post_thumbnail( 'large' );
}
?>これらはWordPress標準データへ保存されるため、標準テンプレート関数で出力できます。
<?php
echo esc_html( get_the_title() );
?>投稿タイトル(WordPress 標準)はCFS専用メタではなく、WordPress標準の投稿タイトルを更新します。テーマ側では get_the_title() など標準テンプレート関数で扱います。
<?php
the_content();
?>本文(WordPress 標準)は post_content を更新します。CFS専用メタではないため、テーマ側では the_content() や get_the_content() などWordPress標準の本文関数で扱います。
<?php
$status = get_post_status();
$status_object = get_post_status_object( $status );
echo esc_html( $status_object->label ?? $status );
echo esc_html( get_the_date( 'Y-m-d H:i' ) );
?>保存・公開(WordPress 標準)は投稿ステータス、公開状態、公開日時などをWordPress標準データとして更新します。CFSのフィールド値として出力するものではなく、必要に応じて get_post_status() や get_the_date() などで参照します。
Values from another post
オレンジ文字の部分は設定したフィールド名称、投稿タイプ名と入れ替えます。緑の文字はエスケープです。
<?php
$post_id = 123;
echo esc_html( CFS()->get( 'field_name', $post_id ) );
?>CFS()->get() の第2引数へ投稿IDを渡すと、現在表示中の投稿に関係なく、その投稿・固定ページ・カスタム投稿タイプのフィールド値を取得できます。
<?php
$post_ids = get_posts( array(
'post_type' => 'news', // post またはカスタム投稿タイプを指定
'posts_per_page' => 1,
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'fields' => 'ids',
) );
if ( $post_ids ) :
$post_id = (int) $post_ids[0];
?>
<h4><?php echo esc_html(
CFS()->get( 'text', $post_id )
); ?></h4>
<p><?php echo nl2br( esc_html(
CFS()->get( 'textarea', $post_id )
) ); ?></p>
<?php else : ?>
<p>データがありません。</p>
<?php endif; ?>CFSの値だけを取得する場合は setup_postdata() と wp_reset_postdata() は不要です。投稿タイトルなどのテンプレートタグも使う場合は、通常のWordPressループとして投稿データをセットしてください。
Layout only
管理画面上で入力欄を整理するためのフィールドです。これら自体は値を保存せず、CFS()->get() で出力する値はありません。内側に配置した各フィールドを、それぞれのフィールド名で取得してください。条件分岐グループは選択値を保存するため、上の選択フィールド欄を参照してください。