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

Switch language

当Webサイトのコンテンツ内にはアフィリエイト広告、Googleアドセンス広告が含まれます。
広告主によって不適切な広告が表示されていることに気付いた方は、お手数でございますが該当の広告の「×」を押していただき、「この広告の表示を停止」し所定の流れに従ってください。

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

> 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

では。

関連記事

ウィジェットエリアを追加して表示する方法【WordPress】
こんにちは。 今回はワードプレスでウィジェットエリアを追加し、追加したウィジェットを表示する方法について紹介したいと思います。 それでは、い
WordPressで開発環境を構築する方法
今回はWeb制作の現場では、どのようにWordPressの開発環境を構築しているのかをお伝えしようと思います。 すでに公開しているWordP
旧ドメインから新ドメインに移行するときに注意したこと|wordpressの移行手順
ついに独自ドメイン取得しました!! こんにちは、こんばんは、テックストック(TechStock)管理人です。 昨日 2019年3月7日 に、
【wordpressのサーバー移行はこれ一択!】「All-in-One WP Migration」で一発サーバー移行!サーバー移行に苦しむすべてのエンジニアへ。
こんにちは。管理人です。 今回は私も仕事でかなり苦しんだWordPress(ワードプレス)のサイトを他のサーバーへ移行する、とてつもなく簡単
【WordPress】必ず入れるプラグインと設定【随時更新】
こんにちは。TechStock管理人です。 今回は、Wordpressでwebサイトを作る際に必ずと言っていいほど導入する、プラグインを紹介
Custom Field Suite と Duplicate Post を併用すると起きるバグの解決方法
Custom Field Suite(CFS)と Duplicate Post(DP)を併用すると、記事を複製したときに、記事編集画面では何



コメントを残す

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