カテゴリページを独立したページとして扱いたいため、カテゴリページ毎の新着◯◯を作っています。
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}
回答1件
あなたの回答
tips
プレビュー