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がとても参考になります。

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

関連記事

  1. WordPress

    プラグインを使わないでWordPressにページナビを実装してみる

    WordPressのトップページなどの一番下によくあるページナビをプラ…

  2. Quote Tweet

    WordPress

    選択したテキストをツイートできるWordPressプラグイン「Quote Tweet」

    Quote Tweetはサイト内で選択したテキストを簡単にツイートする…

  3. WordPressにPocketボタンを設置

    WordPress

    WordPressにPocketボタンを設置するやり方

    そういえばPocketのボタンをまだ設置していなかったので、このたび設…

  4. WordPress

    WordPressで指定した固定ページを読み込む方法

    WordPressで例えばトップページに自分の指定した固定ページを読み…

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

    WordPress

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

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

コメント

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

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

最近の記事

  1. macOS Mojaveのダークモード
  2. Olli
  3. 単語帳メーカー(Flashcard Maker App)
  4. 1Password 7

Facebookページ

PAGE TOP