初心者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

では。

関連記事

【WordPress】「外観」に「ウィジェット」の項目が表示されないときの対処法
とりあえず後述のソースを functions.php に追記すれば出てきた。 <?php と ?>は必要に応じて消していただいて
旧ドメインから新ドメインに移行するときに注意したこと|wordpressの移行手順
ついに独自ドメイン取得しました!! こんにちは、こんばんは、テックストック(TechStock)管理人です。 昨日 2019年3月7日 に、
【WordPress】必ず入れるプラグインと設定【随時更新】
こんにちは。TechStock管理人です。 今回は、Wordpressでwebサイトを作る際に必ずと言っていいほど導入する、プラグインを紹介
【WordPressプラグイン】カテゴリーにサムネイルを反映する「Taxonomy Thumbnail」使ってみた(タグ・カスタムタクソノミーにも使えるらしい)
どうも。当サイトとは別に収益性の高いサイトを作ろうと奮闘中の管理人「x」です(笑) 今回はカテゴリー一覧を表示させるときに、各カテゴリーごと
【WordPress】ネットいらず?!ローカルでワードプレスを動かしてオリジナルテーマをカスタマイズする方法
XAMPとかMAMP以外にWordPressをローカル環境でカスタマイズできたらいいのになぁーと思って何となく検索してみたら余裕で見つかった
Breadcrumb NavXTでカテゴリーのURLに「?post_type=○○○○」が付く問題の対策
こんにちは。管理人です。 今回は、Wordpress管理者ご用達のパンくずリストプラグイン「Breadcrumb NavXT」を使った時にカ



コメントを残す

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