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でカスタムフィールドを使って任意のコードやファイルをhead内に読み込ませる

    以前「WordPressで特定の記事やページにカスタムフィールドで指定…

  2. WordPress

    WordPressでアイキャッチ画像を使う場合のサイズ設定や画像ありなし時の振り分けなど

    WordPressにあるアイキャッチ画像がとても便利で、自分もWord…

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

    WordPress

    WordPress投稿画面からTwitterの好きなツイートを簡単に埋め込むことができるやり方

    WordPressの投稿画面でTwitterのツイートを簡単に埋め込む…

  4. WordPressでパンくずリストを設置

    WordPress

    WordPressの自動バックグラウンド更新(アップグレード)の設定について

    先日、WordPressのアップグレードがあったので後でやろう思ってい…

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

    WordPress

    WordPressをサーバーにインストールした後にやっておきたい手順リスト

    WordPressをサーバーにインストールした後にやっておきたい手順リ…

コメント

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

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

最近の記事

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

Facebookページ

PAGE TOP