【WordPress】特定カテゴリーの記事一覧や、ID指定した投稿リストなどのループ処理が重複する問題の解決方法

【WordPress】特定カテゴリーの記事一覧や、ID指定した投稿リストなどのループ処理が重複する問題の解決方法
WordPressで「特定のカテゴリーのリンク付き記事一覧」や「IDで指定した投稿ページのリンク付きリスト」をPHPやテンプレートタグを使用して実装することがあります。
その時に正しくループ処理を終了させないとループ処理が重複するなど、その他の処理に影響が出る、といった問題が発生する場合があります。
その場合、取得したクエリをリセットして処理を終了させる事で問題が解決する場合がございますので、その修正方法をご紹介いたします。

特定のカテゴリーのリンク付き記事一覧

<ul>
<?php $posts = get_posts('numberposts=0&category=★★★,★★★'); global $post; ?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endforeach; endif; ?>
</ul>

「★★★」にカテゴリIDを指定します。複数カテゴリの場合はカンマ区切り。スラッグなどでの指定も可能です。
上記の記述でも表示に問題はありませんが、その他のループ処理に影響が出る場合があります。

<ul>
<?php $posts = get_posts('numberposts=0&category=★★★,★★★'); global $post; ?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endforeach; endif; wp_reset_postdata(); ?>
</ul>

そのため上記のように、取得したクエリをリセットして処理を終了させる記述にしましょう。

IDで指定した投稿ページのリンク付きリスト

<ul>
<?php $posts = get_posts('include=★★★,★★★'); global $post; ?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endforeach; endif; ?>
</ul>

「★★★」にページIDを指定します。複数ページの場合はカンマ区切り。スラッグなどでの指定も可能です。
こちらも同様に上記の記述でも表示に問題はありませんが、その他のループ処理に影響が出る場合があります。

<ul>
<?php $posts = get_posts('include=★★★,★★★'); global $post; ?>
<?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endforeach; endif; wp_reset_postdata(); ?>
</ul>

上記のように、取得したクエリをリセットして処理を終了させる記述にしましょう。

まとめ

今回ご紹介した「特定のカテゴリーのリンク付き記事一覧」や「IDで指定した投稿ページのリンク付きリスト」のように処理を終了させる記述を心がけましょう。

上記の方法でも解決しない場合は、Google先生に質問してください。

リンクが古い。等の問題をポチッと報告→