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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

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

PHP

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

Q&A

1回答

4383閲覧

トップページでget_postsループ時の子カテゴリの取得

T.G

総合スコア14

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/08/17 05:36

get_postsのループを使用してトップページに
特定のカテゴリの最新記事を4件表示させようとしています。

カテゴリの構成はこうなっております
news
|
|-other1
|-other2

blog (親)(今回表示させるもの)
|
|-web(子)
|-movie(子)
|-art(子)

上記のカテゴリ「blog」の最新記事を4件表示させ
投稿ごとにその子要素のカテゴリ名、カテゴリ一覧へのリンクを出力させたいのですが
うまくいきません

コードは下記の通りです

PHP

1<?php 2 $args = array( 3 'posts_per_page' => 4, 4 'category_name' => 'blog' 5 ); 6 $posts = get_posts( $args ); 7 8 if($posts): 9 10 global $post; 11 foreach ( $posts as $post ): 12 setup_postdata( $post ); 13 14 $category = get_the_category(); 15 $cat_name = $category[0]->cat_name; 16 $cat_link = $category[0]->term_id; 17 18 //サムネイルの取得 19 if(has_post_thumbnail()): 20 $src = get_the_post_thumbnail_url(get_the_ID(),'full'); 21 else: 22 $src = '/ogp.jpg'; 23 endif; 24?> 25 26<article class="article"> 27 <div class="backImg" style="background: url('<?php echo $src ?>') center / cover;"></div> 28 <div class="article-txt"> 29 <?php the_time( 'Y/m/d' ); ?> 30 <div class="title-inr"> 31 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 32 </div> 33 34 <a href="<?php echo get_category_link( $cat_link ) ?>" class="link"><?php echo $cat_name; ?></a> 35 </div> 36</article> 37 38<?php 39 endforeach; // ループの終了 40 wp_reset_postdata(); // 直前のクエリを復元する 41 endif; 42?>

このように記述すると、記事によって親要素のBlogと表示されることもあります。
配列の順番が変わってしまっているのは承知の上ですが、
ループ中の記事の子カテゴリだけを表示させる方法がございましたら
ご鞭撻いただけると幸いです

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

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

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

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

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

marlboro_tata

2019/08/17 10:22 編集

記事には、子カテゴリのみが選択されているのでしょうか? それとも、親カテゴリ(Blog)も選択されているのでしょうか? というか、状況から察するに、子カテゴリと親カテゴリが両方選択されていると考えました。アイデアとしては $category = get_the_category(); でカテゴリを取得した後にカテゴリのループを回して、親カテゴリが0以外のもの(つまり子カテゴリ)の$cat_name、$cat_link の値を取得することかなあ、と思いました。 そもそも親カテゴリを選択しないという方法もある気はしてますが、未検証です。
T.G

2019/08/19 02:35 編集

ループ回す条件は親カテゴリにしています こちらはindex.phpに記述しています
guest

回答1

0

foreach でループを回す前に、

PHP

1<?php 2$category_blog = get_category_by_slug( 'blog' ); 3?>

として、blogカテゴリーを取得。
その後、$cat_name, $cat_link を取得する部分を

PHP

1<?php 2$categories = get_the_category(); 3$category_blog_child = false; 4foreach ( $categories as $category ) { 5 if ( $category_blog->term_id === $category->parent ) { 6 $category_blog_child = $category; 7 break; 8 } 9} 10if ( empty( $category_blog_child ) ) { 11 $category_blog_child = $category_blog; 12} 13$cat_name = $category_blog_child->cat_name; 14$cat_link = $category_blog_child->term_id; 15?>

とすれば、親カテゴリーが blog(つまり blog の子カテゴリー)ならそのカテゴリーを取得して、もし取得できなければそのまま blog カテゴリーを取得という流れでどうでしょう。

投稿2019/08/19 06:23

hideyuki.motoo

総合スコア72

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問