質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
WordPress

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1343閲覧

タームごとに投稿記事を分類させて表示させたい

kawausomaru

総合スコア29

WordPress

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/12/22 17:40

編集2021/12/28 07:27

目標としては以下の画像のように表示させたいです。

これを実現するために
カスタム投稿とカスタムタクソノミーとタームを作成しました
イメージ説明
イメージ説明

以上を用いて実装したコードがこちらです

archive-member.php <section class="member"> <div class="member__inner"> <?php $args = array( 'post_type' => 'member', 'posts_per_page' => 4, // 表示する件数 'orderby' => 'date', // 日付でソート 'order' => 'DESC', // DESCで新しい、ASCで古い順に表示 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 'taxonomy' => 'position', 'field' => 'slug', 'terms' => 'position3', //タームをスラッグで指定('field'が'slug'なので) ) ); $posts = get_posts( $args ); if ( $posts ): ?> <h3 class="member__inner__title"><?php the_field('position3'); ?></h2> <div class="member__inner__flex"> <a href="<?php the_permalink(); ?>" class="member__inner__flex__box"> <figure class="member__inner__flex__box__img"> <?php if ( has_post_thumbnail() ): ?> <?php the_post_thumbnail(); ?> <?php else: ?> <img src="<?php echo get_template_directory_uri(); ?>/img/ni1.png" alt="西川カメラ1" alt="" class=""> <?php endif; ?> </figure> <h2 class="member__inner__flex__box__name"><?php the_title(); ?></h2> </a> </div> <?php endif; wp_reset_postdata(); ?> </div> </section>

結果このように出力されました
イメージ説明

問題としては
・記事が3件あるのに1件しか出力されない
・タームの名称が出力されない
以上になります

・パーマリンク設定を保存する
・表示件数を管理画面と合わせる

以上を試したができませんでした。
他にも必要な情報などありましたら教えて頂けると助かります。
よろしくおねがいします。

追記:nekoraさんのコードを試した結果

1回目

消えてしまいました
イメージ説明
検証ツール上では何も表示されていない状態です
イメージ説明

追記2:カスタム投稿、カスタムタクソノミーの設定画面
今回上記を実装するにあたってプラグイン(Custom Post Type UI)を使用したので設定画面を載せます
イメージ説明
イメージ説明

追記3:nekoraさんのコードを試した結果

php

1<section class="member"> 2 <div class="member__inner"> 3 <?php 4$args = array( 5 'post_type' => 'member', 6 'posts_per_page' => 4, // 表示する件数 7 'orderby' => 'date', // 日付でソート 8 'order' => 'DESC', // DESCで新しい、ASCで古い順に表示 9 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 10 array( //タクソノミー指定の時はarrayのarrayでないといけない 11 'taxonomy' => 'position', 12 'field' => 'slug', 13 'terms' => array('position3'), //タームズなのでスラッグをarrayで指定。カンマで区切れば複数指定できるので汎用性が高い('field'が'slug'なので) 14 ) 15 ) 16); 17$posts = get_posts( $args ); 18if ( $posts ): ?> 19 <?php foreach ( $posts as $post ) : setup_postdata( $post ); ?> 20 <h3 class="member__inner__title"><?php the_field('position3', $post->ID); ?></h2> 21 <div class="member__inner__flex"> 22 <a href="<?php echo get_permalink($post->ID); ?>" class="member__inner__flex__box"> 23 <figure class="member__inner__flex__box__img"> 24 <?php if ( has_post_thumbnail($post->ID) ): ?> 25 <?php echo get_the_post_thumbnail($post->ID); ?> 26 <?php else: ?> 27 <img src="<?php echo get_template_directory_uri(); ?>/img/ni1.png" alt="西川カメラ1" alt="" class=""> 28 <?php endif; ?> 29 </figure> 30 <h2 class="member__inner__flex__box__name"><?php echo get_the_title($post->ID); ?></h2> 31 </a> 32 </div> 33 <?php endforeach;?> 34<?php else:?> 35 <!-- 要素が取れなかった時もそれがはっきり分かるようにif文のelseでその旨を出力するようにしたほうがいいです --> 36 <P>該当する記事はありません</p> 37<?php 38endif; 39wp_reset_postdata(); 40?> 41 </div> 42</section>

イメージ説明
表示されませんでした

追記4:タームの紐付けの問題点が知りたいです

イメージ説明

上記の画像の通りにカスタムフィールドを作り投稿画面に表示させていたので
出力させたい役職のフィード名(positionc)をコードに入力しました。

php

1<section class="member"> 2 <div class="member__inner"> 3 <?php 4$args = array( 5 'post_type' => 'member', 6 'posts_per_page' => 4, // 表示する件数 7 'orderby' => 'date', // 日付でソート 8 'order' => 'DESC', // DESCで新しい、ASCで古い順に表示 9 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 10 array( //タクソノミー指定の時はarrayのarrayでないといけない 11 'taxonomy' => 'position', 12 'field' => 'slug', 13 'terms' => array('position3'), //タームズなのでスラッグをarrayで指定。カンマで区切れば複数指定できるので汎用性が高い('field'が'slug'なので) 14 ) 15 ) 16); 17$posts = get_posts( $args ); 18if ( $posts ): ?> 19 <?php foreach ( $posts as $post ) : setup_postdata( $post ); ?> 20 <h3 class="member__inner__title"><?php the_field('positionc', $post->ID); ?></h2> 21 <div class="member__inner__flex"> 22 <a href="<?php echo get_permalink($post->ID); ?>" class="member__inner__flex__box"> 23 <figure class="member__inner__flex__box__img"> 24 <?php if ( has_post_thumbnail($post->ID) ): ?> 25 <?php echo get_the_post_thumbnail($post->ID); ?> 26 <?php else: ?> 27 <img src="<?php echo get_template_directory_uri(); ?>/img/ni1.png" alt="西川カメラ1" alt="" class=""> 28 <?php endif; ?> 29 </figure> 30 <h2 class="member__inner__flex__box__name"><?php echo get_the_title($post->ID); ?></h2> 31 </a> 32 </div> 33 <?php endforeach;?> 34<?php else:?> 35 <!-- 要素が取れなかった時もそれがはっきり分かるようにif文のelseでその旨を出力するようにしたほうがいいです --> 36 <P>該当する記事はありません</p> 37<?php 38endif; 39wp_reset_postdata(); 40?> 41 </div> 42</section> 43

イメージ説明

タームの紐付け作業は上記の画像の通り、役職が表示されており選択できるので
問題ないと思ったのですがカウントの数が0のままになります。
イメージ説明

現在の状態においてどのような問題点が考えられますでしょうか?
何度もお手数おかけして申し訳ないです。
よろしくお願いいたします。

追記5:未解決ですが一部コードを修正と現在の状態

tax_queryを一時的にコメントアウトし

php

1<?php the_field('positionc', $post->ID); ?>

php

1<h3 class="member__inner__title">教授</h2>

上記のコードの内容と場所を変更しました。
これによりposition5(教授のターム)で絞り込もうとしたのですが
表示されず。

php

1<section class="member"> 2 <div class="member__inner"> 3 <h3 class="member__inner__title">教授</h2> 4 <div class="member__inner__flex"> 5 <?php 6$args = array( 7 'post_type' => 'member', 8 'posts_per_page' => 4, // 表示する件数 9 'orderby' => 'date', // 日付でソート 10 'order' => 'DESC', // DESCで新しい、ASCで古い順に表示 11 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 12 array( //タクソノミー指定の時はarrayのarrayでないといけない 13 'taxonomy' => 'position', 14 'field' => 'slug', 15 'terms' => array('position5'), //タームズなのでスラッグをarrayで指定。カンマで区切れば複数指定できるので汎用性が高い('field'が'slug'なので) 16 ) 17 ) 18 19); 20$posts = get_posts( $args ); 21if ( $posts ): ?> 22 <?php foreach ( $posts as $post ) : setup_postdata( $post ); ?> 23 <a href="<?php echo get_permalink($post->ID); ?>" class="member__inner__flex__box"> 24 <figure class="member__inner__flex__box__img"> 25 <?php if ( has_post_thumbnail($post->ID) ): ?> 26 <?php echo get_the_post_thumbnail($post->ID); ?> 27 <?php else: ?> 28 <img src="<?php echo get_template_directory_uri(); ?>/img/ni1.png" alt="西川カメラ1" alt="" class=""> 29 <?php endif; ?> 30 </figure> 31 <h2 class="member__inner__flex__box__name"><?php echo get_the_title($post->ID); ?></h2> 32 </a> 33 <?php endforeach;?> 34 <?php else:?> 35 <!-- 要素が取れなかった時もそれがはっきり分かるようにif文のelseでその旨を出力するようにしたほうがいいです --> 36 <P>該当する記事はありません</p> 37 <?php 38endif; 39wp_reset_postdata(); 40?> 41 </div> 42 43 </div> 44</section>

イメージ説明
tax_queryをコメントアウトした所全記事が表示されました。
イメージ説明
前回掲載した役職のカスタムフィールドの下半分が見切れていたので載せます。
イメージ説明
返り値関連に解決の糸口があるのではないかと調べているのですが
未だ解決に至っていない現状です。
カスタムフィールドはAdvanced Custom Fieldsを使用しております。

現在の状態において考えられる問題点もしくは別の解決手段などありましたら助言して頂けると嬉しいです。
何度もお手数おかけして申し訳ないです。
よろしくお願いいたします。

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

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

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

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

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

Lhankor_Mhy

2021/12/23 01:53

CSSは質問と関係がないように見えましたので、質問タグの削除をお願いします。
kawausomaru

2021/12/23 07:06

削除致しました。 ご指摘頂きありがとうございます。
Lhankor_Mhy

2021/12/23 07:07

ご対応ありがとうございます。
kawausomaru

2022/01/04 08:07

カスタムフィールドとカスタム投稿を自作することでカウントされるようになり解決しました。 プラグインを使った不具合なのかもしれません。 同じことで悩んでいる方はご参考ください。
guest

回答2

0

ベストアンサー

コードをさらにさらに修正しました。四度目の正直、これで、うまくいくと思います。


回答のコメントでいただいた問題点についてコードを精査したところおかしな点に気付きましたので直してみました。
これで、再度試してみて下さい。


if文で判定した後、表示してendifなので1つしか出ないのは当たり前です。
get_postsの公式リファレンスに使い方が書いてあります。
get_postsの公式リファレンス

php

1archive-member.php 2 3<section class="member"> 4 <div class="member__inner"> 5 <?php 6$args = array( 7 'post_type' => 'member', 8 'posts_per_page' => 4, // 表示する件数 9 'orderby' => 'date', // 日付でソート 10 'order' => 'DESC', // DESCで新しい、ASCで古い順に表示 11 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 12 array( //タクソノミー指定の時はarrayのarrayでないといけない 13 'taxonomy' => 'position', 14 'field' => 'slug', 15 'term' => 'position3', //('field'が'slug'なので) 16 ) 17 ) 18); 19$posts = get_posts( $args ); 20if ( $posts ): ?> 21 <?php foreach ( $posts as $post ) : setup_postdata( $post ); ?> 22 <h3 class="member__inner__title"><?php the_field('position3', $post->ID); ?></h2> 23 <div class="member__inner__flex"> 24 <a href="<?php echo get_permalink($post->ID); ?>" class="member__inner__flex__box"> 25 <figure class="member__inner__flex__box__img"> 26 <?php if ( has_post_thumbnail($post->ID) ): ?> 27 <?php echo get_the_post_thumbnail($post->ID); ?> 28 <?php else: ?> 29 <img src="<?php echo get_template_directory_uri(); ?>/img/ni1.png" alt="西川カメラ1" alt="" class=""> 30 <?php endif; ?> 31 </figure> 32 <h2 class="member__inner__flex__box__name"><?php echo get_the_title($post->ID); ?></h2> 33 </a> 34 </div> 35 <?php endforeach;?> 36<?php else:?> 37 <!-- 要素が取れなかった時もそれがはっきり分かるようにif文のelseでその旨を出力するようにしたほうがいいです --> 38 <P>該当する記事はありません</p> 39<?php 40endif; 41wp_reset_postdata(); 42?> 43 </div> 44</section>

これでいけるはずですが、環境が違うためテストまではしていません。値が取れてない等ありましたらコメントください。できるだけ対応いたします。

コードブロックの右上のボタンでコード全体をコピーできますので、ご自分の環境に張り付けてテストしてみてください。

投稿2021/12/23 02:36

編集2021/12/24 04:36
nekora

総合スコア501

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

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

nekora

2021/12/23 02:36

回答が役になったなら回答の横の数字をポイントすると回答の評価の増減ができます。 また解決につながった回答はベストアンサーに指定できます。 この設定は個別に指定できますし、同時に設定することもできます。
kawausomaru

2021/12/23 02:54

ご回答頂きありがとうございます 上記やり方で数の問題は解決できました 残りの問題としまして 'tax_query' => array( //タクソノミーに関する指定はこの中にすべて 'taxonomy' => 'position', 'field' => 'slug', 'terms' => 'position3', //タームをスラッグで指定('field'が'slug'なので) ) こちらのコードで全3件の内、該当の1件に絞る設定にしているつもりですが 3件とも表示されてしまっている状態です。 どのような問題が考えられますでしょうか?
nekora

2021/12/23 03:40

えーと、具体的に、私のコードを適用した現状の画像を質問に追加してください(質問は、編集・追記できます)。現状どうなったかが分からないと、この先のアドバイスが出来ません。><
nekora

2021/12/23 04:55 編集

私なりにコードを精査して、おかしな点を見つけました。 コードを再編集していますので、このコードで試してみて下さい。 それでもダメだった場合、現状の画像を質問文に追記してください。
kawausomaru

2021/12/23 07:06

ご回答頂きありがとうございます。 試した結果を追記致しました。 確認して頂けると幸いです。
nekora

2021/12/23 09:05

え!? 今回は自信あったのに・・・ すぐ、再調査します。
nekora

2021/12/23 10:03 編集

調査終了しました。コードは間違ってないようです。(厳密性を求めるなら、少し直すべきところがありますが・・・) 検証ツールで出てないってことは、今回はちゃんとtaxonomyでの絞り込みが機能したからです。 そして、その上で該当する投稿が無かったためタグが出力されなかったのだと思います。 となると、taxonomy名やtermsに指定した、ターム名に間違いがあると考えられます。 質問に、カスタム投稿memberを定義して、タクソノミーなどを追加している部分のソースコードを追記していただけませんか? それではっきりした答えが出ると思います。
kawausomaru

2021/12/23 11:50

お手数おかけして申し訳ございません ご回答頂きありがとうございます 今回カスタム投稿とタクソノミーを定義するのに プラグイン(Custom Post Type UI)を使用したので該当画面を追記しました。 確認のほどよろしくお願いいたします。
nekora

2021/12/23 14:25

コードをさらに修正しました。三度目の正直!! これでうまくいってくれー><
kawausomaru

2021/12/24 02:19

おはようございます。 コード添削ありがとうございます。 試した結果、要素が取れなかった事が判明しました。
nekora

2021/12/24 04:34 編集

取れませんか・・・ では、  'terms' => array('position3'), を  'term' => 'position3', に変更してみましょう。コードを直しておきます。これで取れるかもです。
nekora

2021/12/24 19:58 編集

ちょと気になったんですが、  これを実現するために  カスタム投稿とカスタムタクソノミーとタームを作成しました の画像で、各記事のカウントが0になってるんですが・・・ あと、この画像だとターム欄でposition9とかではなくスラックがposition9になってます。 本当にタームを作りましたか??タームが無ければ、タームを指定したら記事数が0になるのは当たり前ですよ? ターム指定が記述がおかしかった時は単純に全投稿(タームがあろうがなかろうがお構いなし)で 記事が表示されましたが、今は正しくタームで絞り込んでます。 なので、タームを本当に作って合って、その記事数は0以上ですか?? その辺確認してみて下さい。 記事数が0なら出なくて当然ですよ? ちなみに、プラグインを使わずに自力でカスタム投稿を作って一覧画面に出したイメージはこんな感じです。このタグのスラックで絞り込むコードが今回の目的となります https://drive.google.com/file/d/1cN9Qlxr2-CzCSR6Xcr-QB7D-55x3GQiY/view?usp=sharing タームを紐づけた記事を準備してから、テストされてますか? 参考リンク:https://webfun-style.com/cpt-ui-custom-taxonomy/ こちらを見ながら正しく作ってあるか確認してください。
kawausomaru

2021/12/26 03:46

nekoraさん返信が遅くなりまして申し訳ございません タームの紐付け作業について現状の問題点を追記したので ご確認いただけましたら幸いです。
nekora

2021/12/26 07:26

拝見しました。カスタムフィールドでタームですか… 当方、プラグインなど使わなくてもカスタム投稿を作れるので、今回はレアなケースですね。 気になるのは、カウントが0のままということですね、だから記事がないのでタームで絞り込むと0件になる。 ちょっとこちらでも調べてみます。
nekora

2021/12/26 07:45

https://haniwaman.com/template-page/ こちらのページで、Custom Post Type UIとAdvanced Custom Fieldsの併用例があって 最後に記事を新規作成して、その結果カウントが増えてます。 カスタムフィールドはWordPress標準のものですか?それともAdvanced Custom Fieldsですか? お答えください。 そして、記事の新規作成を行ってからpotition9などを右下の部分でチェック入れて紐づけます。 画像はラジオボタンなので、カテゴリーになっているような気がします。 作り方にもよりますが、一つの記事が複数のカテゴリーには入れないので、ラジオボタン。 一方タグは、一つの記事に複数設定できるのでチェックボックスになります。 (例:男性、助教授、情報処理学科) この辺を紹介したURLで確認してみてください。
kawausomaru

2021/12/28 07:28

nekoraさんご回答ありがとうございます。 参考URL確認致しました。 現状の問題点を追記したのでご確認いただけましたら幸いです。
guest

0

以下の記事を参考にしてみて下さい

https://asalworld.com/custom-post-term/

1つのタームを指定して記事一覧を表示や
複数タームを指定して記事一覧を表示が出来ます

投稿2021/12/29 17:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問