記事最終更新日:2017年08月20日

記事投稿日:2017年04月30日

閲覧数:1613 views

WP_Queryで奇数と偶数だけ違う処理をする方法メモ -【WordPress&PHP】

はじめに

今回のD.M.C.【デベメモドットコム】の記事は「WP_Queryで奇数・偶数の時だけ違う処理をする方法」という事で、前回、紹介した「WP_Queryで最初と最後だけ違う処理をする方法メモ」)ではWordPRessループで最初と最後だけ違う処理をする方法を紹介しましたが、この記事では奇数・偶数の時だけ違う処理をする方法を紹介したいと思います。こちらも前回と同様、ちょっとしたテクニックですが詳しくメモ(解説)していきたいと思います。

奇数・偶数の時だけ違う処理をする方法

WordPressループで投稿を出力する際に、奇数・偶数で処理を分ける場合は前回の「WP_Queryで最初と最後だけ違う処理をする方法メモ」)でも紹介した「$wp_query->current_post」を使用します。

ループで増えていく「current_post」の数値をif文の条件分岐で奇数番目と偶数番目の時は処理を分けていきます。

分岐はPHPの「%」を使います。これは剰余というもので余り求める時に使います。今回の例でいうと「current_post」を2で割った余りが0なら奇数番目、1なら偶数番目の処理がされる事になります。

注意点としては「current_post」0から始まる点です。

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <?php if ($wp_query->current_post % 2 == 0) : ?>
            // 奇数の投稿の処理
        <?php else : >
            // 偶数の投稿の処理
        <?php endif; ?>

    <?php endwhile; ?>
<?php endif; ?>

CSSで奇数・偶数を分けたい時も基本は同じで大丈夫です。

下記は三項演算子で短く記述しています。

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>

        <div class="<?php echo ($wp_query->current_post % 2 == 0) ? 'odd' : 'even';  ?>">

    <?php endwhile; ?>
<?php endif; ?>

またサブループの時の場合ですが、こちらもメインループ基本は同じですが、サブループの時は独自でパラメータをセットしてWP_Queryオブジェクトをインスタンス化するので、自分で作成したオブジェクト変数のcurrnet_postを使って比較しないといけません。

<?php $params = array(
    'key' => 'value',
    'key' => 'value',
    'key' => 'value',
);

$query = new WP_Query($params);

?>

<?php if ($query->have_posts()) : ?>
    <?php while ($query->have_posts()) : $query->the_post(); ?>

        <?php if ($query->current_post % 2 == 0) : ?>
            // 奇数の投稿の処理
        <?php else : ?>
            // 偶数の投稿の処理
        <?php endif; ?>


    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

感想

奇数・偶数の時だけ違う処理をしたい場合は結構あると思うので今回の記事で紹介出来てよかったと思います。

では最後まで見ていただき、ありがとうございました。

About / ブログについて

D.M.C. / デベメモドットコム

D.M.C.【デベメモドットコム】はWEB制作に関することを中心に、 その他、関連する事まで出来るだけわかりやすく備忘録としてメモを残していくブログです。
このブログを通して少しでも為になる情報を発信して皆さんと共有できればとても嬉しいです。

ページトップへ

Categories

Tags