🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

680閲覧

特定のカスタムフィールドをタクソノミー別に表示させたいです

matsun

総合スコア8

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/10/28 04:24

編集2019/10/28 09:04

前提・実現したいこと

お世話になります。
特定のカスタムフィールドにある全てのタクソノミーをタクソノミー別に、タクソノミ名とそれに該当する記事の画像フィールドの画像とタイトルを全て表示させたいです。

商品カテゴリ1(ターム)  ー画像フィールド + 記事タイトル 1-1  ー画像フィールド + 記事タイトル 1-2 商品カテゴリ2(ターム)  ー画像フィールド + 記事タイトル 2-1  ー画像フィールド + 記事タイトル 2-2  ー画像フィールド + 記事タイトル 2-3 商品カテゴリ3(ターム)  ー画像フィールド + 記事タイトル 3-1  ー画像フィールド + 記事タイトル 3-2  ー画像フィールド + 記事タイトル 3-3  ー画像フィールド + 記事タイトル 3-4  ー画像フィールド + 記事タイトル 3-5

発生している問題・エラーメッセージ

下記のコードにてタクソノミ名は全て表示することができたのですが、画像フィールドの画像が表示されず、タイトルが通常投稿のタイトルが表示されてしまいました。

画像を表示してタームの記事タイトルを出したいです。
どうぞご指摘のほどよろしくお願い致します。

投稿タイプスラッグ:menu_post
タクソノミースラッグ:bread
カスタムフィールドの画像フィールド名:menu-photo
画像の返り値:ID

<?php $terms = get_terms('bread'); foreach( $terms as $term ) : echo '<h2><span>' . $term->name . '</span></h2><ul>'; query_posts('showposts=5&cat=' . $term->term_ID); while(have_posts()) : the_post();?> <li> <?php $image = get_field('bread','menu_spot_'.$term_id); if( !empty($image) ): ?> <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" /> <?php endif; ?> <?php the_title(); ?> </li> <?php endwhile; wp_reset_query(); echo '</ul>'; endforeach; ?>

試したこと

画像の表示で下記も試しましたが表示できませんでした。

<?php $image = get_field('menu-photo'); $size = 'full'; if( $image ) { echo wp_get_attachment_image( $image, $size ); } ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

query_postsはプラグインやテーマで使われることを想定しない関数です

query_posts

一般的な投稿の取得には、WP_Query または get_posts を使ってください。
query_posts の代わりに次のようにすることを強く推奨します:

  1. アクション pre_get_posts を用いる。
  2. pre_get_posts にフックした関数の中で is_main_query() を使ってメインクエリーであるかチェックする。
  3. メインクエリーの場合のみ、それを変更する。

php

1get_field('bread','menu_spot_'.$term_id) 23get_field('bread','menu_spot_'.$term->term_id)

なのでは?

投稿2019/10/28 10:29

KazuhiroHatano

総合スコア7819

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsun

2019/10/30 12:51

お世話になります。 pre_get_postsについて分からなかったので、調べてfunctions.phpに試してみたのですが、うまく動かずエラーが出てしまいました。 度々申し訳ないのですがご助言頂けませんでしょうか。 ``` <?php function term_pre_get_posts( $query ) { /* 管理画面,メインクエリに干渉しないために必須 */ if ( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_post_type_archive('menu_post')) { $query->set( 'post_type', 'menu_post' ); $tax_query[] = array( 'taxonomy' => 'bread', 'field' => 'term_id', 'operator' => 'IN'); $query->set( 'tax_query', array('relation' => 'AND' , $tax_query) ); } } add_action( 'pre_get_posts', 'term_pre_get_posts' ); ?> ``` ※エラーメッセージ ``` Error: Call to a member function is_main_query() on null in C:\Users\bette\Local Sites\sample\app\public\wp-content\themes\pizza\functions.php on line 98 Call Stack # Time Memory Function Location 1 0.0005 390728 {main}( ) ...\index.php:0 2 0.0012 390928 require( 'C:\Users\bette\Local Sites\sample\app\public\wp-blog-header.php' ) ...\index.php:17 3 0.1960 6737456 require_once( 'C:\Users\bette\Local Sites\sample\app\public\wp-includes\template-loader.php' ) ...\wp-blog-header.php:19 4 0.2007 6759968 include( 'C:\Users\bette\Local Sites\sample\app\public\wp-content\themes\pizza\page-menu.php' ) ...\template-loader.php:78 5 0.2090 6795688 apply_filters( ) ...\page-menu.php:5 6 0.2090 6795984 WP_Hook->apply_filters( ) ...\plugin.php:208 7 0.2092 6797504 do_shortcode( ) ...\class-wp-hook.php:286 8 0.2092 6799216 preg_replace_callback ( ) ...\shortcodes.php:199 9 0.2092 6799696 do_shortcode_tag( ) ...\shortcodes.php:199 10 0.2092 6800080 my_php_Include( ) ...\shortcodes.php:325 11 0.2097 6817784 include( 'C:\Users\bette\Local Sites\sample\app\public\wp-content\themes\pizza\menu-archive.php' ) ...\functions.php:22 12 0.2113 6834224 term_pre_get_posts( ) ...\menu-archive.php:8 ```
KazuhiroHatano

2019/10/30 13:29

引用の注意文はサブループでメインクエリを上書きするのをやめましょう メインクエリを上書きする必要がある場合でも query_postsではなくadd_action('pre_get_posts',...);を使いましょうということです 質問のケースではget_postsを使うか WP_queryオブジェクトを作ってループを書くかで対応すべきです https://wpdocs.osdn.jp/関数リファレンス/WP_Query 質問のコードについては 今一度変数の中身を細かくvar_dumpするなりして 想定通りの値が得られているか確認したほうが良いかと思います
matsun

2019/10/31 15:00

自分がいかにループやメインクエリについて理解してなかったかを身をもって知りました。 基本的なところから勉強し直してようやく解決できました。 ご指摘いただいた事で気付くことができました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問