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

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

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

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

PHP

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

Q&A

1回答

772閲覧

カテゴリー、タクソノミーでの絞り込み検索結果一覧のページ送りを指定表示件数以下の時非表示にしたい

bobodog

総合スコア6

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/05/16 05:29

カテゴリー、タクソノミーでの絞り込み検索結果一覧のページ送りを指定表示件数以下の時非表示にしたい

WordPressで自作テーマを作成しています。
Custom Post Type UI で作成した「college」というカスタム投稿の内容を、カテゴリーで検索、タクソノミーで検索、キーワードで検索と三つの方法で検索できるよう作業を進めています。
検索結果は表示できるようになったのですが、検索結果に該当する投稿が指定している件数以下の時もページ送りがずっと表示されている状態で困っています。
タクソノミーとカテゴリーで絞込み検索をした時に常時表示され、キーワード検索をした時は該当する記事が指定している件数以下の時消えます。キーワード検索をした時のように指定件数以下の時には表示されないようにしたいです。
関係していそうな箇所のphpソースを記載いたします。

functions.php

/* 検索結果ページにページネーション追加 */ function page_navi() { global $wp_query; $bignum = 999999999; if ( $wp_query->max_num_pages <= 1 ) return; echo '<div class="pagenation">'; echo paginate_links( array( 'base' => str_replace( $bignum, '%#%', esc_url( get_pagenum_link($bignum) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $wp_query->max_num_pages, 'prev_text' => '<i class="fa fa-caret-left"></i>', 'next_text' => '<i class="fa fa-caret-right"></i>', 'type' => 'list', 'end_size' => 3, 'mid_size' => 3 ) ); echo '</div>'; }

search.php

<?php $s = $_GET['s']; $catnum = ""; $post_tag = ""; if(filter_input(INPUT_GET, 'catnum')) { $catnum = $_GET['catnum']; } if(filter_input(INPUT_GET, 'subject')) { $post_tag = $_GET['subject']; } if($post_tag){ $taxquerysp[] = array( 'taxonomy'=>'colleges', 'terms'=> $post_tag, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND', ); } if($catnum){ $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> $catnum, 'include_children'=>false, 'field'=>'term_id', 'operator'=>'AND', ); } else { $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> 'colleges', 'include_children'=>false, 'operator'=>'OR', ); } ?> <?php $args = array( 'post_type'=>'college', 'tax_query' => $taxquerysp, 's' => $s, 'post_status' => 'publish', 'order' => 'ASC', 'orderby' => 'meta_value', 'meta_key' => 'yomi', 'paged'=>get_query_var('paged'), 'posts_per_page' => 5, ); $q = new WP_Query( $args ); ?> <section class="list"> <h3>「<?php the_search_query(); ?><?php if($catnum){ ?><?php echo get_cat_name($catnum); } ?><?php if($post_tag){ ?><?php echo get_term_by('slug',$post_tag,"post_tag")->name; } ?>」の検索結果</h3> <?php if ( $q->have_posts() ) : while ( $q->have_posts() ) : $q->the_post(); ?> <div class="list__box clearfix"> ループ内容 </div> <!-- /.list__box --> <?php endwhile; else : ?> <p>申し訳ございません。該当する記事がございません。</p> <?php endif; ?> </section> <?php page_navi(); ?> <?php wp_reset_query(); ?>

searchform.php

<!-- カテゴリー検索 --> <form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>"> <input type="hidden" name="s" id="s01" /> <select name="catnum"> <option value="">選択してください</option> <?php $categories = get_categories(); foreach($categories as $category) : ?> <option value="<?php echo $category->term_id; ?>"><?php echo $category->cat_name; ?></option> <?php endforeach; ?> </select> <input id="submit" type="submit" value="&#xf002;" accesskey="f" /> </form> <!-- タクソノミー検索 --> <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>"> <input type="hidden" name="s"> <input type="hidden" name="post_type" value="college" /> <select name="subject"> <option value="">選択してください</option> <?php $taxonomy_name = 'colleges'; $taxonomys = get_terms($taxonomy_name); if(!is_wp_error($taxonomys) && count($taxonomys)): foreach($taxonomys as $taxonomy): $tax_posts = get_posts(array('post_type' => get_post_type('college'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); if($tax_posts): ?> <option value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></option> <?php endif; endforeach; endif; ?> </select> <input type="submit" id="searchsubmit" value="&#xf002;" /> </form> <!-- キーワード検索 --> <form method="get" id="searchform" action="<?php echo home_url('/'); ?>"> <input type="text" name="s" id="testSearchInput" value="<?php the_search_query(); ?>" placeholder="入力例:保育士" /> <input type="hidden" name="post_type" value="college"> <input type="submit" value="&#xf002;" accesskey="f" /> </form>

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

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

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

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

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

guest

回答1

0

page_navi();$q を渡して $wp_query の代わりに使うように書き換えてみては。
また、テンプレート上で new WP_Query するより pre_get_posts でクエリ自体を書き換えるほうがナビゲーションの問題が出にくいです。

【pre_get_postsでメインクエリを制御する | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/cms/post9420.html

【【wordpress】pre_get_postsを使ってみませんか? - Qiita】
https://qiita.com/ruka/items/e14280d34eddf49efad1

投稿2018/05/17 18:11

kei344

総合スコア69366

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

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

bobodog

2018/05/29 08:31

ご連絡遅れてしまい申し訳ございません。ご回答誠にありがとうございます。 page_navi()に$qを渡して$wp_queryの代わりに使うよう書き換えるというのはfunctions.phpの$wp_queryと書かれている部分を$qに変更すればいいと思い書き換えてみたのですが、どの検索を使用してもページ送りが出てこなくなってしまいました。 function page_navi() { global $q; $bignum = 999999999; if ( $q->max_num_pages <= 1 ) return; echo '<div class="pagenation">'; echo paginate_links( array( 'base' => str_replace( $bignum, '%#%', esc_url( get_pagenum_link($bignum) ) ), 'format' => '?paged=%#%', 'current' => max( 1, get_query_var('paged') ), 'total' => $q->max_num_pages, 'prev_text' => '<i class="fa fa-caret-left"></i>', 'next_text' => '<i class="fa fa-caret-right"></i>', 'type' => 'list', 'end_size' => 3, 'mid_size' => 3 ) ); echo '</div>'; } またpre_get_postsで表示する方法に変えるものも併せて作成してみたのですが、キーワード検索結果は正常に表示されますが、カスタムフィールドの値での並び替え(五十音順に並び替え)が効かなくなってしまいました。またキーワード検索以外は何を選択しても全件表示されるようになってしまいました。 function pre_get_posts_custom($query) { if( is_admin() || ! $query->is_main_query() ){ return; $s = $_GET['s']; $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> 'colleges', 'include_children'=>false, 'operator'=>'AND', ); if(filter_input(INPUT_GET, 'catnum')) { $catnum = $_GET['catnum']; if($catnum){ $taxquerysp[] = array( 'taxonomy'=>'category', 'terms'=> $catnum, 'include_children'=>false, 'field'=>'term_id', 'operator'=>'AND', ); } } if(filter_input(INPUT_GET, 'subject')) { $post_tag = $_GET['subject']; if($post_tag){ $taxquerysp[] = array( 'taxonomy'=>'colleges', 'terms'=> $post_tag, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND', ); } } if( $query->is_search() ){ $query->set( 'post_status','publish' ); $query->set( 'orderby','meta_value' ); $query->set( 'meta_key','yomi' ); $query->set( 'order','ASC' ); $query->set( 'tax_query',$taxquerysp ); $query->set( 's',$s ); $query->set( 'posts_per_page', 2 ); return; } } } add_action( 'pre_get_posts', 'pre_get_posts_custom' ); お手数をおかけしてしまい申し訳ございませんがおかしい点をご指摘くださると幸いです。
kei344

2018/05/29 08:33

コメントエリアではマークダウンが使えないため、コードはここではなく質問文に追記してください。(決して元のコードを消さないでください)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問