前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。