カスタムフィールドの値を全部出す – キー名順、ACF用

ワードプレスのメモ

採用情報とか店舗情報、商品情報など、フィールドがいっぱいあるような投稿を出力する場合、フィールド一つひとつ記述するのがとっても面倒臭い。

ので、よく見かける「カスタムフィールドの値をすべて出力する」のACF版を用意。

出力

<table><tbody>
<?php
$fields = get_post_custom();
if( $fields ){
	ksort( $fields );
	foreach ( $fields as $key => $value ) {
		if( !( preg_match( "/^_/", $key ) ) ){ 
			if( !empty( $value[0] ) ){
				$fieldlabel = get_field_object( $key );
				echo '<tr>';
        		echo '<th>' . esc_html( $fieldlabel[ 'label' ] ) . '</th><td>' . get_field( $key ) . '</td>'; 
				echo '</tr>';
			}
		}
	}
}
?>
</tbody></table>

フィールドのID順に並ばれても困るので、「ksot()」で並んでもらいます。

よって、フィールド名(ラベルじゃない)を、並べたい順に連番する必要があります。

  1. itemdata_1_name
  2. itemdata_2_price
  3. itemdata_3_maker

みたいな感じ。
ACFの管理画面で並べ替えてもIDが変わるnameが変わるわけではないので注意

キー名はラベルに変換。

ACFを使っていない場合は

「get_field( $key )」を

  • 「$value[0]」
  • 「get_post_meta( $post->ID, $key, true )」
  • 「apply_filters( ‘the_content’, get_post_meta( $post->ID, $key, true ) )」

などに変えればOK。

キーごとに出力文を書くか、キーに連番を振るか、

既にデータが入力されている場合、キー名は変えられないのでキーごとに出力文を書くしかないですね。

「順番は気にしない」なんてことは無いでしょうから。

 

新規サイトの場合は連番を振ってから入力していけばいいのですが、

順番を変えたい

とか出てくると、もうダメ。

 

フィールドを追加したい

ならば、

  1. itemdata_100_name
  2. itemdata_200_price
  3. itemdata_300_maker

のようにマージンを取っておけば何とかなる。

「自動で値を全部出す」をやめれば

出したいフィールドを指定するのであれば、連番とかキー名とか一切気にしなくて済む。

<table><tbody>
<?php
$field_names = array( 'item_name', 'item_price', 'item_maker' );
foreach ( $field_names as $field_name ) {
	if( get_post_meta( $post->ID, $field_name, true ) ){
		$field_label = get_field_object( $field_name );
		echo '<tr class="' . $field_name . '">';
		echo '<th>' . esc_html( $field_label[ 'label' ] ) . '</th><td>' . get_field( $field_name ) . '</td>';
		echo '</tr>';
	}
}
?>
</tbody></table>

「$field_names」に、出したいフィールドの名前を、出したい順に書き連ねておく。

フィールドごとに見た目を変えたいこともあるので、クラス名も追加。

 

結局、大抵の場合これだけで済みそうな気がしてきた。