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

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

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

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

PHP

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

Q&A

解決済

1回答

483閲覧

複数のタクソノミーによる検索フォーム(searchandfilter)でカテゴリごとに表示が重複してしまう

yukki-1227

総合スコア47

WordPress

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

PHP

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

0グッド

0クリップ

投稿2023/02/07 02:42

編集2023/02/07 16:12

複数のタクソノミーによる検索フォームを作りたいです

前提

ここに質問の内容を詳しく書いてください。
(例)
現在wordpressにてsearchandfilterを使ってカスタム投稿タイプmemberのcustomタクソノミーのスラッグ名:gyousyu(業種)とスラッグ名:area(地域)という二種類のタクソノミーの検索フォームを作っています。
(ちなみに、search.phpとsearchform.phpを使ってこれとは別にカスタム投稿タイプmemberのキーワード検索を作っています。)
searchandfilterにこだわってはいませんがsearchandfilterを使わないと実装できる技術が無くまた無料プラグインで無いと使えない状況です。

発生している問題

例えば、業種:不動産業と地域:名古屋市中区を選んだ際に同じ名前が二つ表示されてしまいます
同じ名前が重複表示されないようにするためにはどうすればよいでしょうか?
何卒よろしくお願い致します。

ソースコード

searchandfilter

1[searchandfilter fields="serch,gyousyu,area" post_types="member" submit_label="検索する" empty_search_url="https://onebitious.net/no_results/" ]

taxonomy.php(検索結果はここに表示されます)

1<?php get_header(); ?> 2<?php echo do_shortcode('[elementor-template id="4160"]'); ?> 3<?php echo do_shortcode('[breadcode] 4 '); ?> 5 6<div class="taxonomy_background-color"> 7 8 <div class="custom-wrap"> 9 10<h2 class="pageTitle">カテゴリー検索結果<span></span></h2> 11 12<main class="main1"> 13 <!-- 開いているページの情報を取得 --> 14 <div class="main1-hantei"> 15 <?php 16 $gyousyu_slug=get_query_var('gyousyu'); 17 $gyousyu=get_term_by('slug',$gyousyu_slug,'gyousyu'); 18 if (empty($gyousyu_slug)) { 19 echo '$var1の中は空です。'; 20} 21else { 22 echo '$var1の中は空ではありません。'; 23} 24 25// if (empty($var2)) { 26// echo '$var2の中は空です。'; 27// } 28// else { 29// echo '$var2の中は空ではありません。'; 30// } 31 ?> 32 </div> 33 <script> 34 jQuery(function() { 35 var value2=jQuery('.pageTitle').text(); 36 console.log(value2); 37         var value=jQuery('.main1-hantei').text(); 38 var value3=(value.trim()); 39 console.log(value3); 40 if (value3 == '$var1の中は空です。') { 41 42 console.log('業種は空です'); 43 jQuery('.container1').addClass('dis-none'); 44 45 }else{ 46 console.log('違うよ!'); 47 } 48 49 50}); 51 52 53 54 55 </script> 56 57 <section class="sec1"> 58 <div class="container1"> 59 <div class="sec_header"> 60 <h2 class="title title-jp"><span class="gyousyu_Category_a">業種:</span><br><span class="gyousyu_Category_q"><?php echo $gyousyu->name; ?></span></h2> 61 <span class="title title-en"><?php echo strtoupper($gyousyu->slug); ?></span> 62 63 </div> 64 <div class="row justify-content-center"> 65 <?php if(have_posts()): ?> 66 <?php while(have_posts()):the_post(); ?> 67 <div class="col-md-\3"> 68 <?php get_template_part('loop','member'); ?> 69 70 </div> 71 <?php endwhile; else: ?> 72 <p>記事がありません。</p> 73 <?php endif; ?> 74 75 </div> 76 </div> 77 </section> 78 <!-- 開いているページの情報を取得 --> 79 <div class="main2-hantei"> 80 <?php 81 $area_slug=get_query_var('area'); 82 $area=get_term_by('slug',$area_slug,'area'); 83 if (empty($area_slug)) { 84 echo '$var1の中は空です。'; 85} 86else { 87 echo '$var1の中は空ではありません。'; 88} 89 90// if (empty($var2)) { 91// echo '$var2の中は空です。'; 92// } 93// else { 94// echo '$var2の中は空ではありません。'; 95// } 96?> 97 </div> 98 99 <script> 100 jQuery(function() { 101// var value2=jQuery('.pageTitle').text(); 102// console.log(value2); 103         var value4=jQuery('.main2-hantei').text(); 104 var value5=(value4.trim()); 105 console.log(value5); 106 if (value5 == '$var1の中は空です。') { 107 108 console.log('地域は空です'); 109 jQuery('.container2').addClass('dis-none'); 110 111 }else{ 112 console.log('違うよ!'); 113 } 114 115 116}); 117 118 119 120 121 </script> 122 123 <section class="sec2"> 124 <div class="container2"> 125 <div class="sec_header"> 126 <h2 class="title title-jp"><span class="gyousyu_Category_a">地域:</span><br><span class="gyousyu_Category_q"><?php echo $area->name; ?></span></h2> 127 <span class="title title-en"><?php echo strtoupper($area->slug); ?></span> 128 129 </div> 130 <div class="row justify-content-center"> 131 <?php if(have_posts()): ?> 132 <?php while(have_posts()):the_post(); ?> 133 134 <div class="col-md-\3"> 135 <?php get_template_part('loop','member'); ?> 136 137 </div> 138 139 <?php endwhile; else: ?> 140 <p>記事がありません。</p> 141 <?php endif; ?> 142 143 </div> 144 </div> 145 </section> 146</main> 147 </div> 148</div> 149 150<?php get_footer(); ?>

試したこと

$var1の中は空です。か否かでクエリが空だった時にはds-noneというクラス名(カスタムcssにてdisplay:none)を付与させたことで、
業種または地域の片方のみ何かプルダウンで選択した場合には名前が重複しないようにしました。

また、get_query_varでタクソノミーの情報を取得しているので、get_query_varに配列でgyousyuとareaのタクソノミーを配列にして入れたらいいのではないかとは思っていますがそれが正しいのかもやり方も分かりません。(絞り込みはsearchandfilterの機能なのかなぜか上手くいっています。)
今のやり方ではgyousyuとareaの二つの情報がバラバラに出ているのでarrayなどの配列でまとめた方がいいと思いhttps://www.trevo-web.com/tech/tax-query-listなどを試しましたが上手くいきません。

他には、 foreachで配列の中身の値をループさせて重複している文字列を取得し同じだったら消すという処理を行うことで名前の重複をふせごうとも考えましたがその場合、同姓同名の別人だった場合も名前が消えてしまうのでボツ案になりました。

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

WordPress:現在のバージョン: 6.1.1

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
taxonomy.phpを下記のようにするだけで絞り込み検索できて重複も解消されました。

taxonomy.php

1<?php get_header(); ?> 2<?php echo do_shortcode('[elementor-template id="4160"]'); ?> 3<?php echo do_shortcode('[breadcode] 4 '); ?> 5 6<?php if( have_posts() ): ?> 7 8<div class="search_width_all"> 9 <div class="search_top_margin"> 10 <h2 class="search_title">「<?php the_search_query(); ?>」の検索結果</h2> 11 </div> 12 <?php while( have_posts() ): the_post(); ?> 13 14 <div class="search_a_margin"> 15 <ul class="search_ul_name"> 16 <li class="search_li_name"> 17 <a href="<?php the_permalink(); ?>" target="_blank" rel=“noopener”><?php the_title(); ?></a> 18 </li> 19 </ul> 20 </div> 21 22 <?php endwhile; ?> 23 24 <div class="search_under_margin"> 25 </div> 26</div> 27 28<!-- 検索ワードがヒットしないとき --> 29 30<?php else: ?> 31 <div class="search_none_margin"> 32  <p class="search_p_result">検索結果はありませんでした。</p> 33 <p class="search_p_result">再度サイト内検索、または下部リンクより目的のページをお探しください。</p> 34 </div> 35<?php endif; ?> 36<script> 37 38 jQuery(function() { 39 40  jQuery('#pan li:nth-child(2)').text('会員プロフィールのカテゴリー検索'); 41 42}); 43</script> 44 45<?php get_footer(); ?>

投稿2023/02/07 07:12

yukki-1227

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問