初心者webデザイナー・コーダーのための備忘録|Tech Stock 【テックストック】

【コピペ可】非プラグイン依存!カスタムフィールド出力の統一した書き方

> WordPress

私が知っているメジャーなカスタムフィールド系プラグインは以下の3つです。

いずれのプラグインも独自のカスタムフィールド出力関数が用意されています。

例えば、Smart Custom Fields であればこのように記述します。

<?php
echo scf::get('カスタムフィールド名’);
?>

複数のカスタムフィールド系プラグインを使用する機会は多くは無いかもしれませんが、プラグインによってできることとできないことがあるため、やむを得ず複数のプラグインをインストールして運営することが少なからずあります。

そのような場合、一部ではSmart Custom Fields(スマートカスタムフィールド)の出力方法で書いていたり、別の個所ではAdvanced Custom Fields(アドバンスドカスタムフィールド)での書き方になっていたりと、書き方が統一されていないまま制作が進んでいく場合があります。

今回は、そのような場合でもカスタムフィールドを出力する記述方法を一貫したまま複数のプラグインを使用できる書き方をご紹介します。

書き方

では、いつも通り結論からお伝えします。

カスタムフィールドの出力方法は、投稿記事の場合とタクソノミタームの場合で書き方が異なります。

それでは、まずは投稿・カスタム投稿の記事に登録したカスタムフィールドを出力する書き方からお伝えします。

カスタムフィールド出力方法(投稿編)

投稿・カスタム投稿の場合は、例えばこのように書きます。

<?php
echo get_post_meta($post->ID, 'sample_key', true);
?>

次にタームの場合です。

カスタムフィールド出力方法(ターム編)

タクソノミータームの場合は、例えば、このように書きます。

<?php
echo get_term_meta($term_id, 'sample_key', true);
?>

コピペ用

様々なケースに応じたカスタムフィールドの出力方法をコピペで実装できるテンプレートを作ってみました。

どうぞご活用ください。d(^^*)

記事ページ(single.php)でループフィールドで画像を出力

繰り返し(ループ)フィールドを使用する場合、フィールドタイプで「ループ」を選択したり、「繰り返し」のチェックをONにしたりなどの設定が必要です。

プラグイン独自の関数を使用する場合はこの「繰り返し」で設定したキー(IDや名前とも言う)を使用して、一度ループ全体の情報取得する必要があります。

しかし、カスタムフィールドに依存しない書き方ではループのキーを使いません。

例えば、画像フィールドをループする場合はこのように記述します。

<?php if (have_posts()) { // 記事がある場合 ?>
<?php while (have_posts()) { //記事がある限りループ
	the_post(); //記事情報を取得 ?>

<?php
$count = 1;
$sample_image = get_post_meta($post->ID, 'sample_image', false);
foreach ($sample_image as $value) {
	$sample_image_url = wp_get_attachment_image_src($value, 'medium')[0];
	$sample_image_alt = get_post_meta($value, '_wp_attachment_image_alt', true);
	if ( empty($sample_image_alt ) ) { // 画像に代替テキストが設定されていなかった場合
		$sample_image_alt = get_the_title() . '_' . $count;
	}
	?>
	<img src="<?php echo $sample_image_url; ?>" alt="<?php echo $sample_image_alt; ?>">
<?php $count++; } ?>

<?php } //end while ?>
<?php } //end if ?>

タームページ(taxonomy.php)でループフィールドで画像とテキストを出力

こちらも同様に、繰り返し(ループ)フィールドを使用する場合、フィールドタイプで「ループ」を選択したり、「繰り返し」のチェックをONにしたりなどの設定が必要です。

こちらもプラグイン独自の関数を使わずにカスタムフィールドを取得する場合は繰り返しフィールドのキーは使用しません。

ここでは、ループフィールドの中に画像フィールドとテキストエリアフィールドを作った場合を想定しています。

<?php
// まずは今のページのターム情報を取得
$term_object = get_queried_object();
$term_id = get_queried_object_id();
$term_name =  $term_object->name;
?>

<?php
$sample_term_image = get_term_meta($term_id, 'sample_term_image', false); // とりあえずループの中の画像フィールドを取得
for ($i=0; $i < count($sample_term_image); $i++) { // 取得された画像フィールドは配列で取得され、その数だけループさせる
	//画像情報取得
	$sample_term_image = get_term_meta($term_id, 'sample_term_image', false)[$i];
	$sample_term_image_url = wp_get_attachment_image_src($sample_term_image, 'medium')[0];
	$sample_term_image_alt = get_post_meta($sample_term_image, '_wp_attachment_image_alt', true);
	if ( empty($sample_term_image_alt) ) {
		$sample_term_image_alt = $term_name . '_' . $i;
	}
	//テキスト情報取得
	$sample_term_text = get_term_meta($term_id, 'sample_term_text', false)[$i];
?>

<img src="<?php echo $sample_term_image_url; ?>" alt="<?php echo $sample_term_image_alt; ?>">
<p><?php echo $sample_term_text; ?></p>

<?php } //end for ?>

まとめ

以上、カスタムフィールド系プラグインに依存しない出力方法の紹介でした。

コピペ用に最後にお伝えしたコードは少し長いのでコピペするのに気が引けるかもしれませんね💦

他の方が書いている技術系ブログのような見やすいデザインじゃなくてごめんなさいです💦

読んでいただいたあなたのお役に立てれば幸いです。m(_ _)m

では。




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です