質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

714閲覧

Wordpressのサブループで一定回数後にクエリを変更したい

haru-_-ki

総合スコア2

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2020/06/21 05:42

編集2020/06/21 09:37

Wordpressのサブループで一定回数後にクエリを変更したい

###実現したいこと
通常投稿にて指定カテゴリの記事を6件新着にて表示後、その指定カテゴリの記事を期間(過去6ヶ月)の範囲でランダムで6件(全部で12件)表示したくループを書こうと思ったのですが、途中でクエリを変更する事はできるのでしょうか。

<?php $today = date('Y/m/d'); //本日の日付 $setday = date('Y/m/d', strtotime('-6 month')); //6ヶ月前の日付 $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリー名', 'posts_per_page' => 6 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- ここに新着を6件表示 --> <?php endwhile; ?> <!-- クエリ変更 --> <?php $the_query = null; ?> <?php $today = date('Y/m/d'); $setday = date('Y/m/d', strtotime('-6 month')); $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリー名', 'date_query' => array( array( 'compare' => 'BETWEEN', 'inclusive' => true, 'before' => $today, 'after' => $setday ), ), 'orderby' => 'rand', 'posts_per_page' => 6 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- ここに上書きしたクエリの条件を表示 --> <?php endwhile; ?> <?php endif; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?>

試したこと

親ループを新着の条件でセットし endwhile の後に上記の条件をセットたのですが、案の定記事が重複してしまいました...
最初の条件をクリアしたのが原因でしょうか?

親でセットした条件を継承しつつクエリを追加できるのでしょうか。

よろしくお願いします。

解決コード

<!-- 新着記事を表示 --> <?php $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリ', 'posts_per_page' => 6, 'fields' => 'ids' ); $the_query = new WP_Query($args); $post_ids = $the_query->posts; // 除外記事を取得 ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- 投稿を表示 --> <?php endwhile; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?> <!-- 過去6ヶ月の記事をランダム表示 --> <?php $today = date('Y/m/d'); $setday = date('Y/m/d', strtotime('-6 month')); $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'category_name' => 'カテゴリ', 'date_query' => array( array( 'compare' => 'BETWEEN', 'inclusive' => true, 'before' => $today, 'after' => $setday ), ), 'orderby' => 'rand', 'posts_per_page' => 6, 'post__not_in' => $post_ids //除外記事 ); $the_query = new WP_Query($args); ?> <?php if($the_query->have_posts()): ?> <?php while ($the_query->have_posts()): $the_query->the_post(); ?> <!-- 投稿を表示 --> <?php endwhile; ?> <?php else: ?> <!-- 投稿が無い場合 --> <?php endif; ?> <?php wp_reset_postdata(); ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「クエリを追加」ではなく新たなクエリにおいて除外すべき投稿を指定してください。「新着6件」のidを配列に保存しておいてpost__not_inパラメータに渡せばよいです。

【wordpress 記事一覧で特定の記事を除外する - Qiita】
https://qiita.com/triamquium/items/91ea57ad0ad30a356b03

【いっつも忘れるWP_Queryの使用方法とパラメータ一覧。がっつり整理してみた | WEMO】
https://wemo.tech/160

投稿2020/06/21 05:48

kei344

総合スコア69606

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru-_-ki

2020/06/21 09:32

'fields' => 'ids' にて取得した値を次のループにて除外できました。 早急なコメントありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問