【シンプルが1番】原点に戻ってアーカイブ・カテゴリページで超簡単ループ

色々要望があって、試みていくうちにループが思うようにできなくなった

なんてことありますよね。私も昔はよく陥っていました。

archive.phpcotegory.phpで、複雑なコードを書いてしまって、他のカテゴリが取得されてしまったり、ページ送りができなくなってしまうことがあります。
難しく考えすぎて動かなくなってしまう事が多いので、まず下記のコードをarchive.phpcotegory.phpにコピペして下さい。

まずテンプレートにループの記述

archive.php cotegory.php

<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    ここにループさせるコード
  <?php endwhile; ?>
  <?php if(function_exists('wp_pagenavi')) : wp_pagenavi(); endif; ?><!--WP-PageNavi-->
<?php endif; ?>
<?php wp_reset_query(); ?>

とてもシンプルなpre_get_postsでのループ

ただこれだけだと表示条件等の設定が書いてありません。
この設定はfunctions.phpに記載します。

ループのオプション設定を記述

functions.php

function news_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
    return;

    if ( $query->is_category( 'ここにカテゴリ名' ) ) {
            /* 表示件数 */
            $query->set( 'posts_per_page', '10' );

            /* 並び順条件 */
            $query->set('orderby','post_date');

            /* 降順昇順の設定 */
            $query->set('order', 'DESC');

            /* カテゴリーID指定 */
            $query->set( 'cat','5' );

            /* カテゴリーID除外 */
            $query->set( 'cat','-3' );

            /* カテゴリースラッグ指定 */
            $query->set( 'category_name','ここにスラッグ' );

            /* 特定カテゴリー除外 */
            $query->set( 'category__not_in',array(4,5) );

            return;
    }
}
add_action( 'pre_get_posts', 'news_posts_per_page' );

他にも設定条件はたくさんありますがこれで大抵事足りるかと思います。

カスタム投稿タイプの条件設定する場合

投稿カテゴリーは上記設定にして、カスタム投稿タイプの条件設定する場合は上記のコードを

functions.php

function news_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
    return;

    if ( $query->is_category( 'ここにカテゴリ名' ) ) {
            /* 表示件数 */
            $query->set( 'posts_per_page', '10' );

            /* 並び順条件 */
            $query->set('orderby','post_date');

            /* 降順昇順の設定 */
            $query->set('order', 'DESC');

            /* カテゴリーID指定 */
            $query->set( 'cat','5' );

            /* カテゴリーID除外 */
            $query->set( 'cat','-3' );

            /* カテゴリースラッグ指定 */
            $query->set( 'category_name','ここにスラッグ' );

            /* 特定カテゴリー除外 */
            $query->set( 'category__not_in',array(4,5) );

            return;
    }
    if ( $query->is_post_type_archive( 'ここにポストタイプスラッグ' ) ) {
            $query->set( 'posts_per_page', '10' );
            $query->set('orderby','post_date');
            $query->set('order', 'DESC');
            return;
    }
}
add_action( 'pre_get_posts', 'news_posts_per_page' );

というようにここに条件を追加していくことが可能です。

これでarchive.phpcotegory.phpはシンプルにしておくことができます。

最新情報をチェックしよう!