カスタム投稿の最新記事を投稿一覧に
-
初めて質問させていただきますので不作法がございましたら申し訳ありません。
以下の条件で新着情報一覧を表示したい部分があります。
・デフォルトの投稿で新着情報を投稿し、通常通り一覧表示する
・カスタム投稿も同じ一覧に表示するが、最新のみ取得するWP_queryでpost_typeを複数設定すると「最新記事のみ」という条件を反映できないため、
https://teratail.com/questions/26139
の記事を参考にSQL文を以下のように記載いたしました。$query = <<<EOT SELECT * FROM ( SELECT post_type, max(post_date) AS tmp FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post','post1','post2') GROUP BY post_type ORDER BY post_date DESC ) AS post INNER JOIN {$wpdb->posts} AS ij ON ij.post_type = post.post_type AND ij.post_date = post.tmp LIMIT 10 EOT; $posts = $wpdb->get_results($wpdb->prepare($query, null)); foreach($posts as $post): the_title(); endforeach;
これで「最新の記事のみ」という条件は果たすことが出来たのですが、デフォルトの投稿も1件しか読み込めません。
SQL文に触れたことが無かったので以下のような書き方が出来ないか試してみたのですが、うまく取得できませんでした。
基礎的な文法が理解できていないのでかなり頓珍漢な書き方をしてしまっているようにも思います。$query = <<<EOT SELECT * FROM ( SELECT post_type, max(post_date) AS tmp FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post1','post2') GROUP BY post_type ORDER BY post_date DESC ) AS c_post SELECT * FROM ( SELECT post_type, post_date FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type IN ('post') ORDER BY post_date DESC ) AS post INNER JOIN {$wpdb->posts} AS ij ON ij.post_type = c_post.post_type AND ij.post_date = c_post.tmp INNER JOIN {$wpdb->posts} AS ij ON ij.post_type = post.post_type AND ij.post_date = post.post_date FULL JOIN c_post ON post.post_type = c_post.post_type AND post.tmp = c_post.post_date LIMIT 10 EOT; $posts = $wpdb->get_results($wpdb->prepare($query, null)); foreach($posts as $post): the_title(); endforeach;
他の方法でも結構です。どうかお力添えいただけましたら幸いです。
よろしくお願いいたします。
2件の返信を表示中 - 1 - 2件目 (全2件中)
2件の返信を表示中 - 1 - 2件目 (全2件中)
- トピック「カスタム投稿の最新記事を投稿一覧に」には新たに返信することはできません。