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

では。

関連記事

【ページネーション】WP-PageNaviをアーカイブページで表示させる方法
こんにちは。 管理人です。 かなり前から問題だったんですが、記事一覧ページ、アーカイブページ(archive.php)で下のようなページネー
特定のユーザーでログインすると特定のテーマで表示されるプラグインをAIに作ってもらった
近頃、Chat GPT なるものが話題ですが、私もChat AI 的なサブスクリプションサービスを契約してみました。 お題目にもある通り、そ
Smart Custom Fields愛用者が常用する全カスタムフィールド出力方法
私の仕事柄、WordPressでサイトを1からカスタマイズして作ったりリニューアルのメンテナンスやカスタマイズ仕直しの業務が多々あり、毎回非
Breadcrumb NavXTでカテゴリーのURLに「?post_type=○○○○」が付く問題の対策
こんにちは。管理人です。 今回は、Wordpress管理者ご用達のパンくずリストプラグイン「Breadcrumb NavXT」を使った時にカ
【WordPressプラグイン】カテゴリーにサムネイルを反映する「Taxonomy Thumbnail」使ってみた(タグ・カスタムタクソノミーにも使えるらしい)
どうも。当サイトとは別に収益性の高いサイトを作ろうと奮闘中の管理人「x」です(笑) 今回はカテゴリー一覧を表示させるときに、各カテゴリーごと
WordPressで開発環境を構築する方法
今回はWeb制作の現場では、どのようにWordPressの開発環境を構築しているのかをお伝えしようと思います。 すでに公開しているWordP



コメントを残す

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