WordPress

シングルページに同一カテゴリーの記事一覧を表示するカスタマイズ

WordPressのシングルページの記事の下に現在表示されている記事と同じカテゴリーの一覧を表示させるやり方です。いくつかやり方があるのですがトラックバックURLがおかしくなったりわけわからなくなって色々試した結果これに落ち着きました。

[ads_center]

query_postsを使ってみる

まずは現在のカテゴリーIDを取得します。カテゴリーが複数ある場合がありますが最初のカテゴリーだけを取得するようにしてみます。

foreach((get_the_category()) as $cat) {
     $cat_id = $cat->cat_ID;
     break;
}

次にquery_postsに引き出す情報をパラメータで指定していきます。

query_posts(
     array(
          'cat' => $cat_id, 
          'showposts' => 10, 
     );

showpostsは表示させる件数です。ここでは10件にしています。あとはループで取得した情報を表示させていきます。

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
<?php endif; ?>

最後にループをリセットしておきます。これをつけないとコメントなど色々とおかしくなっちゃいます・・・

<?php wp_reset_query() ?>

これで現在と同じカテゴリーの記事が10件表示されるようになります。WordPressのフォーラムを参考にしてみました。

現在表示されている記事をリストから除外したい場合

もう少しカスタマイズしてみました。同一カテゴリーリストは表示されたのですが、現在表示されている記事もリストに入っているのでこれを表示しないようにしてみます。やり方は現在表示されている投稿IDを取得してそれをquery_postsの引数であるpost__not_inに配列で渡してあげます。
現在の投稿IDを変数に代入したい場合にはget_the_ID()を使用します。the_ID()では変数に代入できないみたいですね。

$post_id = get_the_ID();
foreach((get_the_category()) as $cat) {
     $cat_id = $cat->cat_ID ;
     break ;
}
query_posts(
     array(
          'cat' => $cat_id, 
          'showposts' => 10, 
          'post__not_in' => array($post_id)
     )
);

最終的にやりたかったこと

なんかあとでまた忘れそうなので最終的に自分がやりたかったことは以下のとおりです。

  • シングルページで現在と同じカテゴリーの一覧を表示させる
  • 現在表示されている投稿は除外する
  • 一覧に一つも記事がない場合は何も表示させない(リストを括っているdivなど)

ということで最終的にできたコードはこんな感じです。

<?php
     $post_id = get_the_ID();
     foreach((get_the_category()) as $cat) {
          $cat_id = $cat->cat_ID ;
          break ;
     }
     query_posts(
          array(
               'cat' => $cat_id, 
               'showposts' => 10, 
               'post__not_in' => array($post_id)
          )
     );
?>
<?php if(have_posts()) : ?>
<div>
     <ul>
<?php while (have_posts()) : the_post(); ?>
     <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
     </ul>
</div>
<?php endif; ?>
<?php wp_reset_query() ?> 

これが正しいコードなのかはあまり自信がないのですがとりあえず今のところ問題なく表示されいるので大丈夫かと思います。query_postsは他にも色んな引数などがあるのでもっと知りたい人はCodexがとても参考になります。

以上、シングルページに同一カテゴリーの一覧を表示するやり方でした。

WordPressのシングルページで前後の投稿やページ分割のリンクを出力前のページ

あとで読むiPhoneアプリ「Read It Later」の基本的な設定や簡単な使い方次のページ

関連記事

  1. WordPress

    WordPressのクイックドラフト機能を使ってみた

    そういえば、WordPress 3.8になってから新しくなったクイック…

  2. WordPress

    WordPressで「この記事の所要時間」という読了時間を表示させてくれるプラグイン「estimat…

    とても便利なWordPressのプラグインを発見したので備忘録です。よ…

  3. WordPress

    WordPressでコメント欄などに表示されるアバター「Gravatar」に登録してみる

    毎回、今更感全開の記事ですが時間が少しあったのでGravatarに登録…

  4. WordPress

    WordPressでウィジェットのアーカイブを一発でドロップダウンにする超簡単な方法

    知らなかったですこれ。前からずっとアーカイブをドロップダウンにできない…

  5. WordPressのログイン時のツールバー

    WordPress

    WordPressで現在のページのタグ名を出力するにはsingle_tag_titleを使う

    先日「WordPressで現在のページのカテゴリー名を出力するにはsi…

  6. WordPressでmicrodataを使ったパンくずリスト

    WordPress

    WordPressでパンくずリストをmicrodataを使ってマークアップするやり方

    そういえばこのサイトではまだパンくずリストを作成していなかったので今回…

コメント

  1. この記事へのコメントはありません。

  1. 2012年 11月 10日
    トラックバック:電ビWeb担Blog

最近の記事

  1. 田沢湖
  2. ゴムの耳栓
  3. ライオンコーヒー(バニラマカダミア)
PAGE TOP