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

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

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

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

PHP

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

HTML

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

Q&A

解決済

1回答

3850閲覧

WP_Queryを使用したカテゴリページでの親カテゴリと子カテゴリの分岐

T.G

総合スコア14

WordPress

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

PHP

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

HTML

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

0グッド

0クリップ

投稿2019/07/12 05:34

WP_Queryを使用して記事一覧を表示させています。

ドメイン/blog では子要素の記事全て
ドメイン/web などではそのカテゴリの記事一覧を表示させたいのですが。

ドメイン/blog では他の親カテゴリ(news)が表示させたり、子要素のカテゴリ名がおかしかったりします。
まだwordpressに慣れ親しんで直りませんので、もし改善策がございましたらよろしくお願いいたします。

カテゴリはこのようになっています
NEWS(親)
blog(親)(今回のもの)
|
|-web(子)
|-movie(子)
|-art(子)

category.phpで分岐させています

PHP

1//category.php 2<?php 3if ( in_category('news') ) { 4 include(TEMPLATEPATH . '/category-news.php'); 5} elseif ( in_category('blog')) { 6 include(TEMPLATEPATH . '/category-blog.php'); 7} 8?>

PHP

1//category-blog.php 2<div id="wrapper"> 3 4<?php 5 $paged = get_query_var('paged') ?: 1; 6 7 $category = get_the_category(); 8 $cateID = $category[0]->category_nicename; 9 10 //$argsのプロパティを変えていく 11 $args = array( 12 'paged' => $paged, 13 'posts_per_page' => 6, 14 'post_type' => 'post', 15 'orderby' => 'date', 16 'order' => 'DESC', 17 'category_name' => $cateID, 18 ); 19 20 $the_query = new WP_Query($args); 21 if ($the_query->have_posts()) : 22 while ($the_query->have_posts()) : $the_query->the_post(); 23 24 $title = esc_html(get_the_title()); 25 $url = esc_url(get_permalink()); 26 $date = get_the_time('Y/m/d'); 27 $category = get_category(get_query_var('cat'),false); 28 29 endif; 30 echo '<article class="article single">'; 31 echo '<a href="',$url,'" class="article-link">'; 32 echo '<p class="blog-time">',$date,'</p>'; 33 echo '<h2 class="blog-title">',$title,'</h2>'; 34//子要素のカテゴリ名を表示させたいです 35 echo '<p class="blog-category"><span href="" class="category">',$category->cat_name,'</span></p>'; 36 echo '</a>'; 37 echo '</article>'; 38 endwhile; 39 endif; 40 41 wp_reset_postdata(); 42?> 43</div>

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

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

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

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

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

guest

回答1

0

ベストアンサー

上記コードは試していませんが、見た感じでいくつか気になる点がありました。

1. カテゴリーの判断方法

カテゴリーの判断をin_category関数でやられていますが、その関数は投稿オブジェクトに対しての関数であり、アーカイブページでの判断には向いてないと思います。

php

1if ($wp_query->is_category('blog')) { 2 get_template_part('category', 'news'); 3}

$wp_queryとは、現在のWP_Queryオブジェクトが入っているグローバル変数です。query_postsなどを使ったあとに、wp_reset_postdataを呼び忘れてしまうと、前回のquery_postsの結果が残ってしまうので、グローバルクエリに直接アクセスする場合は、下記のようなアプローチも可能です。

php

1if ($GLOBALS['wp_the_query']->is_category('blog')) { 2 get_template_part('category', 'news'); 3}

2. そもそも論、category.phpでの分岐が必要ない

下記にWordpressがどのようにしてテンプレートを読み込んでいるか記載されている図がございます。
参考:https://wpdocs.osdn.jp/wiki/images/wp-template-hierarchy.jpg

ここに書いてあるように、category-$slug.phpというファイルを作れば、それにマッチしたカテゴリーの場合に
そのファイルが優先されます。今回の場合だと、ブログカテゴリーのスラッグがblogだった場合に、category-blog.phpをテーマ内に置けば良いわけです。

3. WP_Queryをわざわざ使う意味

ドメイン/blogにアクセスした時点で、Wordpress側でblogカテゴリーの記事をメインクエリとして取得します。
あとは、それらをwhileで回せば良いはずですが、わざわざWP_Queryを使いたい理由を教えて頂けますか?

件数を制御したいということであれば、functions.php等にアクションを書いた方が良いと思います。

投稿2019/07/12 08:46

dany

総合スコア73

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

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

T.G

2019/07/17 08:15

ご回答ありがとうございます。 WP_Queryについては、ページネーションを使いたいので使用しておりました
dany

2019/07/17 08:59

WP_Queryは既にメインクエリとしてwordpressによって作られているので、新たにインスタンスを作らなくてもページネーションに対応できます。(自然と対応できるようになっています)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問