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

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

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

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

PHP

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

Q&A

解決済

1回答

3557閲覧

WordPressのカテゴリページでそのカテゴリだけのコメント一覧を表示したい

worldrun

総合スコア19

WordPress

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

PHP

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

0グッド

0クリップ

投稿2016/06/30 06:36

編集2016/07/01 00:53

カテゴリページを独立したページとして扱いたいため、カテゴリページ毎の新着◯◯を作っています。

Category毎の新着情報は

php

1<?php 2$cat = get_query_var('cat'); 3$posts = get_posts("category=$cat&numberposts=10"); 4rsort($posts); 5?> 6<?php foreach($posts as $post):?> 7<div class="catContent"> 8<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3> 9</div> 10<?php endforeach; ?>

こんな感じで出来たのですが、コメントの方が難しいです。
get_commentsにカテゴリIDを指定するような引数は見当たらず、調べても新着記事系しか出てきませんでした。

特定のカテゴリページで、そのカテゴリに属する記事のコメントを新着順に拾うというのが理想です。
出来れば記事ページでも、その記事カテゴリのコメント一覧を同じく拾いたいです。

もし直接カテゴリを参照することが無理なのであれば、カテゴリIDから記事のIDを用意して、その記事のIDからコメントの配列を作るのかなと思ったのですが、それをどうすれば良いかもイメージが沸きませんでした。

※色々やっていたのですが、現在のカテゴリIDの取得も困難な状態です。
カテゴリページ→取得出来ました。
トップページ→1がかえってきます。
記事ページ→0しかかえってきません。

使ったコードは

php

1$cat = get_query_var('cat'); 2$posts = get_posts("order=asc&category=$cat&numberposts=10"); 3 4$categoryname = single_cat_title('',false); 5$categoryid = get_cat_ID($categoryname); 6 7<?php $cat = get_the_category(); echo $cat[0]->name; ?>

この3種です。どれも記事ページで正しい結果を返してくれませんでした。
ちなみにsidebar.phpに記述しています。

よろしくお願いいたします。

追記:今試しているコードです

php

1 $cat = get_the_category(); 2 $cat = $cat[0]; 3 $chekname= $cat->cat_name; 4 $chekid = $cat->cat_ID; 5 echo ' chekname='.$chekname; echo ' chekid='.$chekid;

結果は
トップページ=1(カテゴリ1の一覧が表示される)
カテゴリページ=3(正常、ID=1のカテゴリは1)
記事ページ=1(全てのカテゴリの記事が一覧表示される)
こんな感じです

コメントのコードです(sidebar.php)

php

1<!-- カテゴリ新着コメント --> 2<div class="box"> 3 4<h2 class="box-header main-color-font">コメント一覧</h2> 5<?php 6// html プレースホルダ― 7$html = '<li><a href="%1$s">%2$s</a></li>'; 8//表示するコメント件数 9$show_comments = 2; 10 11 if( is_category() ) { 12 // カテゴリアーカイブ 13 $page_cat = get_category( get_query_var( 'cat' ) )->term_id; 14 } else if (is_single() ) { 15 // 投稿ページ 16 $page_cat = wp_get_post_categories( $wp_query->post->ID )[ 0 ]->term_id; 17 }else{ 18 $page_cat = 3; 19} 20//コメント分の長さ 21$comment_length = 60; 22 23//コメントの取得条件 24$args = array( 25 'status' => 'approve', 26 'type' => 'comment', 27 'post_status' => 'publish', 28 'number' => 50, //コメント抽出件数 29); 30//コメント情報の取得 31$comments = get_comments( $args ); 32$i = 0; 33 34foreach ( $comments as $key => $comment ) { 35 //コメントとリンク 36 $id = absint( $comment->comment_post_ID ); 37 $url = esc_url( get_permalink( $id ) ); 38 $comment = wp_html_excerpt( $comment->comment_content, $comment_length, '...' ); 39 40 if ( has_category( $page_cat, $id ) ) { 41 // 表示 42 printf( $html, $url, $comment ); 43 $i++; 44 } 45 //表示するコメント件数に達したら、ループを抜ける 46 if ( $i >= $show_comments ) { 47 break; 48 } 49} 50?> 51</div>

カテゴリは1と3の2つしかないです。
カテゴリページは問題なく1と3それぞれ表示されます。
記事ページは1と3の両方が表示されます。
トップページでは1だけが表示されます。

どうやらうまくいったソースがこちらです

php

1 if( is_category() ) { 2 // カテゴリアーカイブ 3 $cat_id = get_category( get_query_var( 'cat' ) )->term_id; 4 } else if (is_single() ) { 5 // 投稿ページ 6 $cat_id = wp_get_post_categories( $wp_query->post->ID )[ 0 ]; 7 }else{ 8 $cat_id = 199; 9}

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

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

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

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

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

kei344

2016/07/01 01:48

解決されたようでよかったです。まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。
guest

回答1

0

ベストアンサー

直接指定する関数などはありませんが、いくつか方法はあるようです。
まず、多めに取得して特定カテゴリのみ出力する方法です。例えば全てのコメントから50件取得して、その中から指定のカテゴリのみを5件まで表示、などといった感じです。

【カテゴリー毎の、最近のコメント – WordPress Snippet】
http://tenman.info/labo/snip/archives/7367

下記方法は「カテゴリーを除外」するコードですが、同じ考え方で特定のカテゴリーに絞り込むことが出来ると思います。ただ、この方法では記事の取得数がかなり多くなってしまうはずなので、上の方法で問題があったら試してみてください。

【フォーラム » 最新のコメント ある特定のカテゴリーを除外 — WordPress】
https://ja.forums.wordpress.org/topic/8922#post-36187

SQLを組み立てるのが処理負荷としては一番低いですが、カテゴリ周りは複雑なため、私には良い提案が出来ません。

投稿2016/06/30 07:09

kei344

総合スコア69364

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

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

worldrun

2016/06/30 07:19

ありがとうございます。とりあえず試してみます。
worldrun

2016/06/30 07:56

コメントの取得は問題なさそうですが、やはりカテゴリIDの取得がうまくいかない状態です。
kei344

2016/06/30 08:43

「うまくいかない状態」とは何かエラーが出るような状態ですか?「真っ白になってしまう」場合、デバックモードで確認してください。⇒ http://mignonstyle.com/debug-mode/
worldrun

2016/06/30 09:16

記事ページで0とか1しか出ない感じです。 カテゴリページだとちゃんとそのカテゴリに対応したIDが取得できます。 $cat = get_the_category(); $cat = $cat[0]; とやっても、記事ページではトップページ同様1という数値しか取得出来ませんでした。 理想は記事ページに対応したカテゴリのIDが取得出来ることなんですが。
kei344

2016/06/30 09:27

どちらを試されているかがわかりませんので、試されているコードを質問文に追記いただけませんか?
worldrun

2016/06/30 10:25

追記いたしました。
kei344

2016/06/30 11:20

どちらも試されていないんですね。 変数名$catは下記理由から使わないほうが良いと思います。 【フォーラム » category.phpで現在のカテゴリースラッグを表示したい — WordPress】 https://ja.forums.wordpress.org/topic/1708 > カテゴリー表示の場合は、グローバル変数$catに表示しているカテゴリーのIDが入っています。 取得は下記のようにすればいけると思います。(未テスト) // カテゴリアーカイブ $page_cat = get_category( get_query_var( 'cat' ) )->term_id; // 投稿ページ $page_cat = wp_get_post_categories( $wp_query->post->ID )[ 0 ]->term_id;
worldrun

2016/06/30 12:09

コメントは【カテゴリー毎の、最近のコメント – WordPress Snippet】の方を試しています。こちらはIDを手で入力すれば動きました。 問題はカテゴリIDが投稿ページで取得出来ないという点です。 そちらのコードで追記し直します。
kei344

2016/06/30 13:10

var_dump($page_cat);として期待したカテゴリが入っているかを確認してはいかがでしょうか。また、複数カテゴリを1つの記事に割り当てているとかそういったことはありませんか?
worldrun

2016/06/30 13:47

確認してみたところ、記事ページではNULLになりました。 トップページではint(1)で、カテゴリページはそれぞれ対応した数値が入っています。 複数割り当てているということはないと思います。
kei344

2016/06/30 16:16

記事ページにて下記を試してもらえますか? var_dump(wp_get_post_categories( $wp_query->post->ID )[ 0 ]); var_dump(wp_get_post_categories( $wp_query->post->ID )); var_dump($wp_query->post->ID);
worldrun

2016/07/01 00:27

int(3) array(1) { [0]=> int(3) } int(42) カテゴリ3で試した結果がこれです。 var_dump(wp_get_post_categories( $wp_query->post->ID )[ 0 ]); はどうやらちゃんと動いてるみたいです!
worldrun

2016/07/01 00:53

試してみた結果うまく動いているようです。そのソースコードを追記しておきました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問