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

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

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

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

1397閲覧

WordPressで「タイトルのみでの記事検索」と「検索文字列を含むカテゴリー名の一覧表示」を実装したい

aptx4869

総合スコア5

WordPress

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

PHP

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/05/09 11:15

前提・実現したいこと

WordPressにて、同ページ内に以下2つの検索フォームを設置したいのですが、
それぞれ以下のような状況になっています。

①タイトルに検索文字列が含まれる記事一覧が表示できる検索フォーム
→本来は検索文字列が「含まれる記事」の一覧を表示させたいのですが、
現状だと「完全一致する記事」の一覧となってしまっていて、
どのようにしたらよいかわかりませんでした…。

②検索文字列が含まれるカテゴリー名を一覧表示できる検索フォーム
→検索の結果、一覧表示されているカテゴリー名をクリックすると、
そのカテゴリーに属する記事を一覧表示したいのですが、
現状ではエラーがたくさんでていて解決できておりません…。

上記②の検索結果画面で出ているエラー

※サーバー名 / テーマ名は、それぞれ server_name / theme_name という文字列に置き換えています

Fatal error: Uncaught Error: Call to a member function have_posts() on bool in public_html/wp-content/themes/theme_name/page-result.php:5 Stack trace: #0 public_html/wp-includes/template-loader.php(98): include() #1 public_html/wp-blog-header.php(19): require_once('/home/server_name/n...') #2 public_html/index.php(17): require('/home/server_name/n...') #3 {main} thrown in public_html/wp-content/themes/theme_name/page-result.php on line 5

該当のソースコード

▼サイトトップページに以下2つの検索フォームを設置
①の検索フォーム

html

1<form method="post" action="/result"> 2 <input name="keyword_title" type="text"> 3 <button type="submit" name="button">検索</button> 4</form>

②の検索フォーム

html

1<form method="post" action="/result"> 2 <input name="keyword_category" type="text"> 3 <button type="submit" name="button">検索</button> 4</form>

▼functions.phpへの記述

php

1// ①の検索 2function get_title_search_query(){ 3 if( !isset( $_POST['keyword_title'] ) ){ 4 return false; 5 } 6 7 if( isset( $_POST['keyword_title'] ) ){ 8 $data = $_POST['keyword_title']; 9 console_log( $data ); 10 $args = array( 11 'posts_per_page' => 20, 12 'title' => $data // ←ここを「一致」ではなく「$data」を含む検索にしたいです… 13 ); 14 $titleSearch_query = new WP_Query( $args ); 15 return $titleSearch_query; 16 } 17} 18 19// ②の検索 20function get_tag_search_query(){ 21 if( !isset( $_POST['keyword_tag'] ) ){ 22 return; 23 } 24 25 if( isset( $_POST['keyword_tag'] ) ){ 26 $args = array( 27 'orderby' => 'name', 28 'parent' => 0 29 ); 30 $categories = get_categories( $args ); 31 foreach ($categories as $category) { 32 echo '<a href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a><br>'; 33 } 34 } 35} 36

▼検索結果ページ page-result.php(スラッグ名:result)の内容

php

1<?php get_header(); ?> 2 3<?php 4$titleSearch_query = get_title_search_query(); 5if( $titleSearch_query->have_posts() ): 6 while( $titleSearch_query->have_posts() ): 7 $titleSearch_query->the_post(); 8?> 9 10 <a href="<?php the_permalink(); ?>"> 11 <p><?php the_title(); ?></p> 12 </a> 13 14<?php 15 endwhile; 16endif; 17 18get_tag_search_query(); 19?> 20 21<?php get_footer(); ?>

試したこと

searchform.php と search.php を作成し、
検索条件をタイトルのみにする方法を試したのですが、
2つの検索フォームを設置することがうまくできませんでした…。

上記の現状のものだと、①の検索フォームは、
検索ワードと記事タイトルが完全一致した場合のみ表示できるところまでは確認できました。
カテゴリー検索のほうは、エラーが解決できず、
検索ワードを含むカテゴリー名の一覧を表示する手がかりもつかめませんでした…。

初心者のため、そもそも自分が書いているコードが見当違いなところもあるかとは思うのですが、
どうかよろしくお願いします。

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

WordPress 5.3.3

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

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

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

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

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

guest

回答1

0

自己解決

2つのformをsearchformと通常のテンプレートファイルに分け、
searchformでは検索するとすぐ出てくる「検索条件をタイトルのみにする方法」をおこない、
通常のテンプレートファイルではpostで検索結果画面に送った検索ワードが
リストに含まれているかどうかによって表示を切り替えました。

投稿2020/05/10 06:37

aptx4869

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問