WordPressの個別投稿ページ内で、「最近の投稿」一覧を表示したい場合があるかと思います。
この場合、記事一覧をそのまま取得してしまうと、現在閲覧中の記事も含まれてしまいますね。
そこで今回の記事では、現在表示中の記事を除外した最新記事一覧を出力する方法を紹介していきます。
【コピペ用】現在表示中の記事を除外した記事一覧を表示するコード
まずはコピペ用のコード一式を紹介します。
コードを理解できる方は、そのままコピペしてお使いください。
個別記事ページ内での使用を想定しているので、single.php
もしくはsingle-投稿タイプ名.php
ファイル内に記述してください。
<?php
$current_post_id = get_the_ID(); // 現在表示中の記事IDを取得
$args = [
"post_type" => 'post', // 投稿タイプを指定
"posts_per_page" => 10, // 表示する記事数を指定
"post__not_in" => [$current_post_id] // 除外する記事のIDを指定
];
$post_query = new WP_Query($args);
?>
<div class="posts">
<?php if ($post_query->have_posts()) : ?>
<ul>
<?php while ($post_query->have_posts()) : $post_query->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</li>
<?php endwhile; ?>
</ul>
<?php endif;
wp_reset_postdata(); ?>
</div>
これで、現在閲覧中の記事を除いた、最新の記事一覧を取得することができます。
次で詳しい解説をしていきますので、コードを理解したい方はこのまま読み進めてください。
【解説】現在表示中の記事を除外した記事一覧を表示するコードの解説
ここからは実装コードを順番に解説していきます。
- 現在表示中の記事のIDを取得する
post__not_in
で現在表示中の記事を除外する- 記事一覧を出力する
手順1. 現在表示中の記事のIDを取得する
まずは、現在開いている記事ページのIDを取得する必要があります。
表示中のページIDは、以下のようにして取得することができます。
<?php get_the_ID(); ?>
このIDは記事を除外する時に使うので、変数に格納しておきます。
<?php $current_post_id = get_the_ID(); ?>
これでcurrent_post_id
という変数には、現在表示中の記事IDが入っている状態です。
手順2. post__not_inで現在表示中の記事を除外する
記事一覧の表示には、WP_Query
を使用します。
このクラスには引数を指定することができ、その中の"post__not_in"
に先ほど取得した記事IDを指定することで、現在表示中の記事を除外します。
<?php
$args = [
"post_type" => 'post', // 投稿タイプを指定
"posts_per_page" => 10, // 表示する記事数を指定
"post__not_in" => [$current_post_id] // 除外する記事のIDを指定(配列)
];
$post_query = new WP_Query($args);
?>
"post__not_in"
に渡すデータは配列である必要があるため、手順1で取得した$current_post_id
を[]
で囲って配列にします。
これで現在表示中の記事は、記事一覧のループから除外されるようになりました。
この他にも様々な条件を指定できますので、詳しくはWP_Queryの関数リファレンスを確認してみてください。
手順3. 記事一覧を出力する
表示中の投稿を除いた記事一覧のデータが用意できたので、次は記事一覧を表示していきます。
記事一覧のデータは$post_query
に入っているので、while
文でループさせて表示します。
<?php if ($post_query->have_posts()) : ?>
<ul>
<?php while ($post_query->have_posts()) : $post_query->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</li>
<?php endwhile; ?>
</ul>
<?php endif;
wp_reset_postdata(); ?>
ここではリンク付きの記事タイトル一覧が表示されるというシンプルな形にしていますが、この部分は各自カスタマイズしてください。
これで現在表示中の記事を除いた記事一覧が表示されるはずです。
以上でコードの解説は終わりです!
【まとめ】WordPressで現在表示中の記事を除外した記事一覧を表示する方法
現在表示中の記事を除外した最新記事一覧を出力する方法を紹介しました。
記事ページの中に「最近の投稿」などの記事一覧を表示したい場合に使えますので、ぜひ参考にしてみてください。
コメント