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() の許可リストを使います。

リッチエディタ

HTML文字列
<?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>

URL

文字列

通常のリンクとして表示

<?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

リンク・ファイル・埋め込み

オレンジ文字の部分は設定したフィールド名称と入れ替えます。緑の文字はエスケープです。

ファイル(URLを返す)

URL文字列
<?php $file_url = CFS()->get( 'file' ); ?>
<a href="<?php echo esc_url( $file_url ); ?>">ダウンロード</a>

URL返却でも wp_check_filetype() で拡張子とMIMEタイプを推定できます。添付ファイル情報をより確実に扱う場合はID返却を選びます。

ファイル(IDを返す)

添付ファイルID
<?php
$attachment_id = (int) CFS()->get( 'file' );
echo wp_get_attachment_image( $attachment_id, 'large' );
?>

返り値はフィールドの「Return Value」設定でURLまたはIDに変わります。

ファイル(ファイル種別ごとにアイコンを出す)

添付ファイル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-extdata-file-mime も出しておくと、CSSやJavaScript側でもファイル種別を扱いやすくなります。

コード

HTML文字列
<?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 );
?>

ショートコード

実行済みHTML

ショートコードの実行結果を表示

<?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 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

WordPress標準データ

投稿カテゴリー (標準 / グローバル)

ターム

標準カテゴリー名を表示

<?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() など標準テンプレート関数で扱うのが基本です。

投稿タグ(WordPress 標準)

ターム

タグ名を表示

<?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>';
    }
  }
}
?>

投稿タイトル(WordPress 標準)

WordPress標準
<?php
echo esc_html( get_the_title() );
?>

投稿タイトル(WordPress 標準)はCFS専用メタではなく、WordPress標準の投稿タイトルを更新します。テーマ側では get_the_title() など標準テンプレート関数で扱います。

本文(WordPress 標準)

WordPress標準
<?php
the_content();
?>

本文(WordPress 標準)は post_content を更新します。CFS専用メタではないため、テーマ側では the_content()get_the_content() などWordPress標準の本文関数で扱います。

保存・公開(WordPress 標準)

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

別の投稿・固定ページからフィールド値を取得

オレンジ文字の部分は設定したフィールド名称、投稿タイプ名と入れ替えます。緑の文字はエスケープです。

投稿IDを指定して取得

投稿ID
<?php
$post_id = 123;
echo esc_html( CFS()->get( 'field_name', $post_id ) );
?>

CFS()->get() の第2引数へ投稿IDを渡すと、現在表示中の投稿に関係なく、その投稿・固定ページ・カスタム投稿タイプのフィールド値を取得できます。

投稿タイプから1件取得して表示

カスタム投稿
<?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() で出力する値はありません。内側に配置した各フィールドを、それぞれのフィールド名で取得してください。条件分岐グループは選択値を保存するため、上の選択フィールド欄を参照してください。