[ 質問者返信待ち ] 膨大な量のエリアや路線をカテゴリー分けしたい

VWSとは フォーラム VK Filter Search Pro [ 質問者返信待ち ] 膨大な量のエリアや路線をカテゴリー分けしたい

[ 質問者返信待ち ] 膨大な量のエリアや路線をカテゴリー分けしたい

15件の投稿を表示中 - 1 - 15件目 (全16件中)
  • 投稿者
    投稿
  • #90917

    KH
    参加者
    制作実績

    ■ WordPress のバージョン
    6.5.2

    ■ テーマ・プラグインは全て最新版で確認してください。
    確認しました。

    ■ テーマの種類
    その他

    ■ 期待する動作
    お世話になります。
    不動産売買のHPに組み込んでいます。
    物件の「エリア」と「路線」にチェックボックスを使いたいと考えております。

    「エリア」も「路線」も500件を超えるほどの検索項目があるため、
    選びやすいよう細分化したいと考えました。

    例えば「エリア」だったら「大阪市」「京都府」「奈良県」などとタクソノミー分けて、
    それぞれの区などの地域を作りたいと考えました。

    具体的には、
    「大阪」というタクソノミーを作り、そこには「大阪市北区」「大阪市南区」など選択項目を作り、
    「京都」というたくそのミーを作り、「京都市東山区」「京都市左京区」と選択項目を作ります。

    しかし、このように分けてしまうと、それぞれの地域が「AND検索」の指定になってしまいます。
    例えば、
    【「大阪市北区」もしくは「京都市東山区」の物件】を探したい場合、両方にチェックを入れて検索すると、
    【「大阪市北区」かつ「京都市東山区」の物件】の結果が示されてしまいます。

    つまり、標準の仕様では、大阪でも京都でも全てのエリアを「エリア」のタクソノミーひとつに入れなければならず。
    チェックボックスが膨大な量になってしまいます。

    これをうまく解決する方法はありませんでしょうか?
    ご教示くださいませ。

    ■ 自分で試した事
    どうすれば良いかわからずにおります。

    ■ 症状が発生するブラウザ
    ブラウザの問題ではありません。

    ■ 実際の症状
    それぞれ500件を超える検索項目のある「エリア」と「路線」について、
    別のタクソノミーにだけど「OR検索」ができるようにしたい。

    大阪タクソノミー
    ∟大阪市北区
    ∟大阪市南区

    京都タクソノミー
    ∟京都市東山区
    ∟京都市左京区

    このように分けてしまうと標準では「AND検索」になってしまう。

    #90939

    VK Filter Search Pro のご利用ありがとうございます。

    記載の内容につきまして、確かにご要望のケースもありえると思いました。
    貴重なご意見ありがとうございます。

    しかしながら、現在担当技術者がGWにてお休みいただいておりますので、GW明けに弊社内部で意見調整した上で改めて返信させていただきます。

    恐れ入りますが今しばらくお待ちくださいませ。

    よろしくお願いいたします。

    #91038

    KH
    参加者
    制作実績

    ご丁寧にありがとうございます。承知いたしました。
    ゴールデンウィーク明けにご連絡をお待ちしております。

    #91389

    KH
    参加者
    制作実績

    お世話になります。秦野です。
    こちらの件、ご進捗いかがでしょうか?
    お忙しいところ恐縮ですが、何卒よろしくお願い致します。

    #91392

    返信遅くなりまして恐れ入ります。
    子テーマの functions.php や独自のカスタマイズ用プラグインなどに以下のコードを記載して or 検索になるかと思いますので、一度検証してみてください。

    
    function my_taxnomy_or_search( $query ) {
    
    	$or_array = array(
    		'osaka',
    		'kyoto',
    	);
    
    	if ( ! is_admin() && is_search() && ! isset( $_GET['vkfs_submitted'] ) ) {
    
    		// タクソノミー一覧を取得
    		$taxonomies = get_taxonomies(
    			array( 
    				'public' => true
    			)
    		);
    
    		// タクソノミーのクエリを取得
    		$tax_query = array();
    		if ( ! empty( $query->tax_query->queries ) ) {
    			$tax_query = $query->tax_query->queries;
    		}
    
    		// 新しいタクソノミークエリの受け皿
    		$new_tax_query = array();
    
    		// クエリの配列を使いやすいように変換
    		$query_taxonomies = array();
    		
    		if ( ! empty( $tax_query ) ) {
    			foreach ( $tax_query as $tax ) {
    				$query_taxonomies[$tax['taxonomy']][] = $tax;
    			}
    		}
    
    		// 配列を整理
    		foreach ( $query_taxonomies as $tax_key => $tax_value ) {
    
    			// タームの値を統合するための配列
    			$tax_terms_array = array();
    
    			// タームの値を統合するためのカウンター
    			$tax_merge_count = 0;
    
    			// タームの関係性 (AND か OR か)
    			$tax_operator = 'IN';
    
    			// 同じタクソノミーに複数のクエリがある場合は統合
    			if ( count( $tax_value ) > 1 ) {
    				foreach ( $tax_value as $key => $value ) {
    					// カテゴリ・タグはスラッグとターム ID の2つが tax_query に入るため、スラッグのみ採用
    					if ( 'slug' === $value['field'] ) {
    
    						// タームの値を統合							
    						$tax_terms_array = array_merge( $tax_terms_array, $value['terms'] );
    
    						// マージが行われた回数をカウント
    						$tax_merge_count++;
    
    						// オペレーターを取得
    						$tax_operator = $value['operator'];
    					}
    				}
    
    				// タームの値を統合したものを新しいクエリに追加
    				$query_taxonomies[ $tax_key ] = array(
    					'taxonomy' => $tax_key,
    					'field'    => 'slug',
    					'terms'    => $tax_terms_array,
    					'operator' => $tax_merge_count > 1 || $tax_operator === 'AND' ? 'AND' : 'IN',
    				);
    			} else {
    				// タームの値を統合しなかったものを新しいクエリに追加
    				$query_taxonomies[ $tax_key ] = $tax_value[0];
    			}
    		}
    
    		// タクソノミー毎にクエリを生成
    		$or_tax_query = array( 'relation' => 'OR' );
    		foreach ( $query_taxonomies as $taxonomy_name => $taxonomy_value ) {
    			if ( in_array( $taxonomy_name, $or_array ) ) {
    				$or_tax_query[] = array(
    					'taxonomy' => $taxonomy_name,
    					'field'    => 'slug',
    					'terms'    => $taxonomy_value['terms'],
    					'operator' => $taxonomy_value['operator'],
    				);
    				unset($query_taxonomies[$taxonomy_name]);
    			}
    			
    		}
    		
    		
    		if ( ! empty( $query_taxonomies ) ) {
    			$new_tax_query = array( 'relation' => 'AND' );
    			foreach ( $query_taxonomies as $tax_key => $tax_value ) {
    				$new_tax_query[] = array(
    					'taxonomy' => $tax_key,
    					'field'    => 'slug',
    					'terms'    => $tax_value['terms'],
    					'operator' => $tax_value['operator'],
    				);
    			}
    		}
    
    		$new_tax_query[] = $or_tax_query;		
    			
    		// 新しいクエリ文字列でクエリを生成
    		$query->tax_query = new WP_Tax_Query( $new_tax_query );
    		
    	}
    }
    add_action( 'parse_tax_query', 'my_taxnomy_or_search' );
    

    ※ 「タームに紐づいている全ての投稿数ではなく、現在の送信されている条件での該当投稿数を表示」には非対応なので有効化しないようにお願いします

    #91481

    KH
    参加者
    制作実績

    ご回答いただきありがとうございます。
    コードもご作成いただき助かります。

    コード上部にある以下の「osaka」「kyoto」の箇所には、「タクソノミースラッグ」を設定するので
    お間違えないでしょうか?

    $or_array = array(
    ‘osaka’,
    ‘kyoto’,
    );

    そのように設定したのですが今度は検索結果が表示されなくなってしまいました。
    具体的には大阪タクソノミーに設定した「大阪市北区 (1)」があり、これは1件投稿があるのですが、
    これにチェックを入れて検索をすると、0件でなにも表示されません。

    ご確認をお願い致します。
    何卒よろしくお願い致します。

    #91482

    KH
    参加者
    制作実績

    いただいたコードを追加したのはfunction.php内です。
    よろしくお願い致します。

    #91486

    DRILL LANCER
    モデレーター

    お世話になります。株式会社ベクトルの平川です。

    コード上部にある以下の「osaka」「kyoto」の箇所には、「タクソノミースラッグ」を設定するので
    お間違えないでしょうか?

    間違いありません。

    「タームに紐づいている全ての投稿数ではなく、現在の送信されている条件での該当投稿数を表示」には非対応なので有効化しないようにお願いします

    もし、こちらを有効化している場合、エラーで処理が止まるのでそのため表示されていないのかもしれません。一度確認ください。

    以上よろしくお願いします。

    #91490

    KH
    参加者
    制作実績

    回答いただきありがとうございます。

    「「タームに紐づいている全ての投稿数ではなく、現在の送信されている条件での該当投稿数を表示」には非対応なので有効化しないようにお願いします」

    上記の内容が恐縮ながらはっきりとわかっていないのですが、
    検索結果の表示には以下のコードをsearch.phpに掲載しております。
    これが上記の有効化にあたってしまいますでしょうか?

    <p class=”search-txt”>検索結果<span class=”number-txt”><?php echo $wp_query->found_posts;?></span>件の物件が該当しました</p>

    ただ、上記1文を削除しても正常に表示がされませんでした。

    いずれにしても、検索結果に件数は表示したいのですが、
    いただいたコードと共存できるやり方がありましたら、ぜひご教示いただければ幸いです。

    お手数おかけして申し訳ありません。
    何卒よろしくお願い致します。

    #91491

    DRILL LANCER
    モデレーター

    お世話になります。株式会社ベクトルの平川です。

    「タームに紐づいている全ての投稿数ではなく、現在の送信されている条件での該当投稿数を表示」につきましては
    「VK Taxonomy Search Pro」の設定項目で

    • 投稿タイプ「VK Filter Search」でフォームを作成している
    • 「投稿件数を表示」が ON

    の条件を満たすときに表示される項目です。

    以上よろしくお願いします。

    Attachments:
    You must be logged in to view attached files.
    #91538

    KH
    参加者
    制作実績

    ご回答いただきありがとうございます。
    今回の設定はサイドバーに検索項目を出したかったため、
    ウィジェットで設定を行っております。

    その場合は、「タームに紐づいている全ての投稿数ではなく、現在の送信されている条件での該当投稿数を表示」の
    表示項目は出ておりません。

    ウィジェットではうまく動かないなど、
    この設定がなにか影響しておりますでしょうか?
    何卒よろしくお願い致します。

    Attachments:
    You must be logged in to view attached files.
    #91541

    DRILL LANCER
    モデレーター

    お世話になります。株式会社ベクトルの平川です。

    弊社では下記の運用方法を推奨しております。

    1. 投稿タイプ「VK Filter Search」でフォームを作成
    2. フォームを設置したい場所に「Call Filter Search」ブロックを設置して作成したフォームを呼び出す

    あと、自作テーマで検証する前に弊社の無料テーマである Lightning でお試しいただけたら幸いです。

    P.S.
    以下個人的な意見です。

    規模がどれくらいかは見当がつきませんが、実際に検索フォームを使うユーザー側からしたら
    大阪と京都を同時に検索できるメリットがある一方、フォームで様々な条件で絞り込むまでが手間のような気がします。

    特に全国規模になった場合それが顕著になるような気がします。
    (少なくとも40都道府県以上については無関係になると思うので)

    なので、大阪府の物件は「大阪府の物件」で投稿タイプを作成し、京都府の物件は「京都府の物件」で投稿タイプを作成したほうが目的の情報を得るまでのステップが少なくなるのでユーザーが調べたい情報を得られやすくなるような気がします。

    #91545

    KH
    参加者
    制作実績

    ご提案いただきありがとうございます。
    作りたいのは不動産のサイトで物件数が2000件ほどあります。
    エリアは大阪、京都などです。

    本当は楽待(https://www.rakumachi.jp/)のような検索システムが良いのですが、
    ここまでは出来ないため
    これの簡易版を作ろうとしています。

    エリア検索として、大阪市北区などの市区町村までエリア分類と、
    路線検索も含みます。

    ご提案いただいた投稿タイプ別でエリアを分けるとなると、
    それぞれにさらに検索がかけられるようにならねばならず(路線や築年数などの絞り)
    今よりも複雑なものになってしまう懸念があります。

    そこで修正するにしても、以下の楽待のように、
    検索項目だけのページを作る方が現実的かと思っているのですが、
    以下の参考サイトでいう「JR」や「東京メトロ」は御社プラグインにおけるタクソノミーに当たるかと思われ、
    やはりそのままではAND検索になってしまいカスタマイズが必要です。

    参考:https://www.rakumachi.jp/syuuekibukken/line

    いずれにしても、いただいたコードが正常に動くかどうかチェックを進めてみます。
    何卒よろしくお願い致します。

    #91778

    KH
    参加者
    制作実績

    お世話になります。
    先日いただいたコードですが、以下を実装をして正常にor検索ができる様になりました。
    ご指導いただき誠にありがとうございます。

    ・「VK Filter Search」でフォームを作成しウィジェット内で「Call Filter Search」で表示
    ・以下のカテゴリー絞るコードをfunction.phpから削除

    <?php
    function SearchFilter($query) {
    if ( !is_admin() && $query->is_main_query() && $query->is_search() ) {
    $query->set(‘category__in’, array(3)); //検索時表示されるカテゴリIDを指定
    }
    return $query;
    }
    add_filter(‘pre_get_posts’,’SearchFilter’);?>

    しかし新たな問題が発生しました。

    ①上記のようにカテゴリーを絞るコードを削除したため、他のカテゴリーの投稿も表示されてしまう。
     現在は「お知らせ」「セミナー」「物件」など複数のカテゴリーがあり、検索で出したいのは「物件」カテゴリーのみです。

    ②「VK Filter Search」「Call Filter Search」を使用することで、検索結果のページにも検索窓が表示されてします。
     検索前は「サイドバー」のみに検索窓があるが、
     検索後は「最上部」と「コンテンツ上部」にも検索窓が追加表示されてしまう。
     ※「検索結果ページにフォームを表示する」のチェックは外した状態でも。
     これを検索前の段階である「サイドバー」のみにしておきたい。

    これら2点を解決したいのですが可能でしょうか?
    何卒よろしくお願い致します。

    #91793

    DRILL LANCER
    モデレーター

    お世話になります。株式会社ベクトルの平川です。

    ①上記のようにカテゴリーを絞るコードを削除したため、他のカテゴリーの投稿も表示されてしまう。
     現在は「お知らせ」「セミナー」「物件」など複数のカテゴリーがあり、検索で出したいのは「物件」カテゴリーのみです。

    「お知らせ」「セミナー」「物件」はカテゴリーで分けるのではなく投稿タイプで分けることをおすすめします。
    画像の赤枠部分の設定を Lightning で試してから自作テーマにどのように反映するか試してみてください。

    トップページもしくは投稿タイプ「投稿」のアーカイブページに「お知らせ」「セミナー」「物件」の情報が乱雑に並ぶのはユーザー目線で美しくないです。

    ②「VK Filter Search」「Call Filter Search」を使用することで、検索結果のページにも検索窓が表示されてします。
     検索前は「サイドバー」のみに検索窓があるが、
     検索後は「最上部」と「コンテンツ上部」にも検索窓が追加表示されてしまう。
     ※「検索結果ページにフォームを表示する」のチェックは外した状態でも。
     これを検索前の段階である「サイドバー」のみにしておきたい。

    この設定は検索結果のループの直前に検索結果のフォームを設置するという意味になります。
    なので、サイドバーのみにする場合は OFF にすれば OK です。

    P.S.
    自作テーマにおける VK Filter Search との兼ね合いは下記トピックでまとめられていると思います。

    Search.phpで意図としない場所にフォームが表示される

    Attachments:
    You must be logged in to view attached files.
15件の投稿を表示中 - 1 - 15件目 (全16件中)
  • このトピックに返信するにはログインが必要です。