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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

Q&A

解決済

3回答

1384閲覧

WordPressの検索結果のページナビゲーションが正常に動作しない

munokura

総合スコア109

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/06/21 05:01

前提・実現したいこと

レンタルサーバーでWordPress5.2.2を使用しています。
テーマは「WorldStar」を使用しています。
https://ja.wordpress.org/themes/worldstar/

複数のタグとキーワードを組み合わせたサイト内検索をしたいと考えています。

発生している問題・エラーメッセージ

エラーメッセージは出ていません。
検索自体は正常に動いています。
しかし、検索結果のページナビゲーションが検索結果件数にかかわらず、全記事分のページがある状態になってしまいます。
そして、ページの先へ行っても、検索結果の1ページ目と同じページが出てしまいます。

サンプルコードが検索結果の全件を表示するもののようなので、ページ送りについては考慮されていないと予想しています。
しかし、解決法が分からず、困っています。

試したこと

1.下記サイトのコードを使用して、serchform.phpとsearch.phpを書き換えました。
https://cotodama.co/taxonomy_checkbox/

searchform.php

PHP

1<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>"> 2 <label> 3 <span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span> 4 <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" /> 5 </label> 6 7<!-- フォームの追加はじめ --> 8<?php 9$my_taxonomy = 'post_tag'; //タクソノミーをスラッグで指定 10$terms = get_terms($my_taxonomy); 11if($terms):foreach($terms as $term): 12?> 13<label><input type="checkbox" name="term_slug[]" value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></label><br /> 14<?php endforeach; endif; ?> 15<input type="hidden" name="my_taxonomy" value="<?php echo $my_taxonomy ?>"> 16<select name="and_or" id="and_or"> 17 <option value="AND">AND</option> 18 <option value="IN">OR</option> 19</select> 20<!-- フォームの追加おわり --> 21 22 <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" /> 23</form> 24

search.php

PHP

1<?php 2/** 3 * The template for displaying search results pages. 4 * 5 * Learn more: http://codex.wordpress.org/Template_Hierarchy 6 * 7 * @package WorldStar 8 */ 9get_header(); 10// Get Theme Options from Database. 11$theme_options = worldstar_theme_options(); 12?> 13 <section id="primary" class="content-area"> 14 <main id="main" class="site-main" role="main"> 15 <?php 16 if ( have_posts() ) : ?> 17 <header class="page-header"> 18 <h2 class="archive-title"><?php printf( esc_html__( 'Search Results for: %s', 'worldstar' ), '<span>' . get_search_query() . '</span>' ); ?></h> 19 </header><!-- .page-header --> 20 <div id="post-wrapper" class="post-wrapper clearfix"> 21 22<?php 23$s = $_GET['s']; 24$my_taxonomy = $_GET['my_taxonomy']; 25$term_slug = $_GET['term_slug']; 26$and_or = $_GET['and_or']; 27 28if($term_slug){ 29 $tax_query[] = array( 30 'taxonomy'=> $my_taxonomy, 31 'terms'=> $term_slug, 32 'include_children'=> false, 33 'field'=> 'slug', 34 'operator'=> $and_or 35 ); 36} 37$args = array( 38 'tax_query' => $tax_query, 39 's' => $s, 40 'posts_per_page' => -1 41); 42$the_query = new WP_Query( $args ); ?> 43<?php if ( $the_query->have_posts() ) : ?> 44 45<!-- ループはじめ --> 46 <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 47 <?php 48 if ( 'post' === get_post_type() ) : 49 get_template_part( 'template-parts/content', $theme_options['post_content'] ); 50 else : 51 get_template_part( 'template-parts/content', 'search' ); 52 endif; 53 ?> 54 <?php endwhile; ?> 55<!-- ループおわり --> 56 </div> 57<?php worldstar_pagination(); ?> 58<?php wp_reset_postdata(); ?> 59<?php else : ?> 60get_template_part( 'template-parts/content', 'none' ); 61<?php endif; ?> 62 <?php 63 else : 64 get_template_part( 'template-parts/content', 'none' ); 65 endif; ?> 66 </main><!-- #main --> 67 </section><!-- #primary --> 68 <?php get_sidebar(); ?> 69<?php get_footer(); ?>

2.検索結果件数の変更
参考ページに「'posts_per_page'は、1ページあたりの表示件数を指定します。ここでは全件表示を指定しています。」と書かれていたので、-1を10に変更してみましたが、最初の10件が表示されるだけで、次ページへ移っても最初の10件が表示されてしまいます。

3.search.php の重複と思われる下記の行を削除するとエラーになってしまいます。

PHP

1 <?php 2 else : 3 get_template_part( 'template-parts/content', 'none' ); 4 endif; ?>

補足情報(FW/ツールのバージョンなど)

サーバーの仕様
Apache 2.2
PHP 5.6.40
MySQL 5.5.62

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

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

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

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

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

guest

回答3

0

pre_get_postsで処理されるか、worldstar_paginationに(どうにかして)$the_queryを渡すかどちらか試してみてはいかがでしょう。(テーマを見ていないので後者は出来るかわかりません)

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

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

投稿2019/07/18 01:29

kei344

総合スコア69407

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

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

munokura

2019/07/18 04:38

ありがとうございます。 確認してみます!
munokura

2019/07/26 10:52

ちょっと難しくて、自分には応用できそうもありませんでした。 申し訳ありません。
guest

0

自己解決

serchform.phpとsearch.phpをもとに戻し、下記プラグインを入れたところ、正常に動作させることができました。

WP Custom Fields Search
https://ja.wordpress.org/plugins/wp-custom-fields-search/

投稿2019/08/23 06:49

munokura

総合スコア109

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

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

0

まだコメントがついていないようなので、
初心者の回答がお役に立つかわかりませんが、
もしヒントになればと思い、記載させていただきます。

私は以下のようにループの前後に追加文を加えています。
但し、query_postsは非推奨の書き方のようです。

<?php query_posts($query_string); query_posts('paged='.$paged); ?> <!-- ループはじめ --> <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <?php if ( 'post' === get_post_type() ) : get_template_part( 'template-parts/content', $theme_options['post_content'] ); else : get_template_part( 'template-parts/content', 'search' ); endif; ?> <?php endwhile; ?> <!-- ループおわり --> <?php wp_reset_query(); ?>

投稿2019/07/18 01:23

sho.duck

総合スコア17

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

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

munokura

2019/07/18 04:39

ありがとうございます。 確認してみます!
munokura

2019/07/26 10:17

こちらを試してみたのですが、ページナビ自体が表示されない状態になってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問