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

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

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

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

PHP

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

Q&A

解決済

1回答

1000閲覧

【WordPress】スキップした投稿数分、ページあたりの投稿表示件数が減ってしまうことを防ぎたい

kskk

総合スコア2

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/07/08 01:44

カスタム投稿とカスタムフィールドを使い、投稿ループを作成しています。

##困っていること
「sell」というカスタム投稿タイプの投稿ループの中で、「soldout」というフィールドで「SOLD OUT」が選択された場合、投稿をスキップする形をとっています。
しかしその際、スキップされた投稿分、1ページあたりの投稿表示数が減ってしまいます。

(例)WP側の設定でページあたりの投稿表示件数を15件にしているが、SOLD OUTの投稿が2件スキップされると、そのページは13件しか投稿が表示されなくなってしまう。

##実現したい状態
条件に当てはまった投稿がスキップされても、ページあたりの表示件数はこちらで設定した件数を保持したい。

##ソースコード
以下、記載します。

PHP

1 2<?php get_header(); ?> 3<div id="container"> 4 <div id="main"> 5 <h2>中古車販売</h2> 6 <div class="carflex"> 7 <?php if (have_posts()) :?> 8   <?php while (have_posts()) : the_post(); ?> 9      <?php if (get_field('soldout') == "SOLD OUT") continue; ?> 10 <div id="post-<?php the_ID(); ?>" class="carphoto"> 11 <p class="soldout"> 12 <?php if (get_field('soldout') == "SOLD OUT"): ?> 13 <span style=color:#FF0000><?php the_field('soldout'); ?></span> 14 15 <?php else : ?> 16 <?php endif; ?></p> 17 <a href="<?php the_permalink(); ?>" class="carwindow"><?php the_post_thumbnail('medium'); ?></a> 18 <h4><?php the_title(); ?></h4> 19 <table class="sell_table pc"> 20 <tr> 21 <th>価格</th> 22 <td><span style=color:#ff6600><?php the_field('kakaku'); ?>万円</span></td> 23 <th class="sp_none">年 式</th> 24 <td class="sp_none"><?php the_field('model'); ?></td> 25 26 </tr> 27 <tr> 28 <th>走行</th> 29 <td><?php the_field('mileage'); ?>万キロ</td> 30 <th>車検</th> 31 <td><?php the_field('syaken'); ?></td> 32 </tr> 33 </table> 34 <table class="sell_table sp"> 35 <tr> 36 <th>価格</th> 37 <td><span style=color:#ff6600><?php the_field('kakaku'); ?>万円</span></td> 38 </tr> 39 <tr> 40 <th class="sp_none">年 式</th> 41 <td class="sp_none"><?php the_field('model'); ?></td> 42 </tr> 43 <tr> 44 <th>走行</th> 45 <td><?php the_field('mileage'); ?>キロ</td> 46 47 </tr> 48 <tr> 49 <th>車検</th> 50 <td><?php the_field('syaken'); ?></td> 51 </tr> 52 </table> 53 <p class="button"><a href="<?php the_permalink(); ?>"><i class="fas fa-angle-right"></i>詳細を見る</a></p> 54 </div> 55 56 <?php endwhile; ?> 57 <?php endif; ?> 58 59 </div> 60 <?php if (function_exists("pagination")) { 61 pagination($additional_loop->max_num_pages); 62 } ?> 63 </div><!-- /main --> 64 65 66 <?php get_sidebar(); ?> 67 <?php get_footer(); ?> 68 69

##試したこと
ページネーションに問題があるのかと思い、様々なパターンのページネーションを試しました。また、WP_Queryを使ったループの書き方も試してみましたが、改善が見られませんでした。

##環境等
WordPressバージョン:5.7.2
PHPバージョン:7.4.20

何か解決できる方法がございましたら、ご教示頂ければ幸いです。

何卒よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

メインクエリにmeta_queryを追加して
SOLD OUTなものが検索結果に含まれないようにしましょう

ACF meta query

parse_request
pre_get_posts
is_main_query

投稿2021/07/08 05:24

KazuhiroHatano

総合スコア7819

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

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

kskk

2021/07/09 02:09

ありがとうございます! 以下のコードで実現ができました! ```PHP <?php $args = array( 'post_type' => 'sell', 'meta_key' => 'soldout', 'meta_value' => 'SOLD OUT', 'meta_compare' => '!=', 'paged' => $paged, 'post__not_in' => array( 1, ), ); $my_query = new WP_Query($args); if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?> <div id="post-<?php the_ID(); ?>" class="carphoto"> <p class="soldout"> <?php if (get_field('soldout') == "SOLD OUT"): ?> <span style=color:#FF0000><?php the_field('soldout'); ?></span> <?php else : ?> <?php endif; ?></p> <a href="<?php the_permalink(); ?>" class="carwindow"><?php the_post_thumbnail('medium'); ?></a> <h4><?php the_title(); ?></h4> <table class="sell_table pc"> <tr> <th>価格</th> <td><span style=color:#ff6600><?php the_field('kakaku'); ?>万円</span></td> <th class="sp_none">年 式</th> <td class="sp_none"><?php the_field('model'); ?></td> </tr> <tr> <th>走行</th> <td><?php the_field('mileage'); ?>万キロ</td> <th>車検</th> <td><?php the_field('syaken'); ?></td> </tr> </table> <table class="sell_table sp"> <tr> <th>価格</th> <td><span style=color:#ff6600><?php the_field('kakaku'); ?>万円</span></td> </tr> <tr> <th class="sp_none">年 式</th> <td class="sp_none"><?php the_field('model'); ?></td> </tr> <tr> <th>走行</th> <td><?php the_field('mileage'); ?>キロ</td> </tr> <tr> <th>車検</th> <td><?php the_field('syaken'); ?></td> </tr> </table> <p class="button"><a href="<?php the_permalink(); ?>"><i class="fas fa-angle-right"></i>詳細を見る</a></p> </div> <?php endwhile; ?> <?php endif; // wp_reset_postdata(); ?> </div> <?php if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?> ``` しかし、投稿タイプsellの中にある全ての投稿が取得されてしまっているのか、投稿は4ページ分しかないものの10ページ分のページネーションが表示されてしまいます。 条件の指定の仕方が悪いのでしょうか...?
KazuhiroHatano

2021/07/09 02:36 編集

"メインクエリに" meta_queryを追加してください add_actionやadd_filterを使うことになります parse_request で特定の投稿タイプ一覧ページであれば query_vars を追加する あるいは pre_get_posts で is_main_query かつ特定の投稿タイプ一覧ページであれば meta_queryを追加する といった方法をとります
kskk

2021/07/09 05:15

実現ができました! pre_get_postsやメインクエリ、サブクエリの理解が足りていませんでした。 今後もこれで色々と応用ができそうです! ありがとうございました✨
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問