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

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

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

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

PHP

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

Q&A

解決済

3回答

469閲覧

WordPressでカスタム投稿のタグ検索結果が出力されない

yoshimitsu41

総合スコア36

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/01/27 02:38

【参考にしたサイト】
http://kotori-blog.com/wordpress/refinement_search/

【カスタム投稿名】
exchange
Custom Post Type UIのプラグインを使用

【タクソノミー名】
coin_tag

【問題になっている点】

php

1#searchform.php 2 3<form method="get" id="searchform" action="<?php bloginfo('url'); ?>"> 4 <label for="s" class="assistive-text">検索</label> 5 <input type="text" name="s" id="s" placeholder="検索" /> 6 7 <div>タグまたはカスタムタクソノミー</div> 8<?php 9$taxonomy_name = 'coin_tag'; 10$taxonomys = get_terms($taxonomy_name); 11if(!is_wp_error($taxonomys) && count($taxonomys)): 12 foreach($taxonomys as $taxonomy): 13 $tax_posts = get_posts(array('post_type' => get_post_type('exchange'),'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) ); 14 if($tax_posts): 15?> 16<label><input type="checkbox" name="coin_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br> 17<?php 18 endif; 19 endforeach; 20endif; 21?> 22 <input type="submit" value="検索" /> 23</form> 24

php

1#search.php 2 3 4<?php 5$s = $_GET['s']; 6$coin_tag = $_GET['coin_tag']; 7//tax_query用 8if($coin_tag){ 9 $taxquerysp[] = array( 10 'taxonomy'=>'exchange', 11 'terms'=> $coin_tag, 12 'include_children'=>false, 13 'field'=>'slug', 14 'operator'=>'AND' 15 ); 16} 17?> 18 19<div>検索条件</div> 20<?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?> 21<?php 22if (is_array($coin_tag)) { ?>タグ(カスタムタクソノミー):<?php 23foreach($coin_tag as $val){ 24if ($val === end($coin_tag)) { 25echo get_term_by('slug',$val,"coin_tag")->slug; 26 }else{ 27echo get_term_by('slug',$val,"coin_tag")->slug.", "; 28} 29} 30} 31 ?> 32 33<div>検索結果</div> 34 35<?php 36query_posts( array( 37 'tax_query' => $taxquerysp, 38 's' => $s, 39 ) 40); 41?> 42<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 43 44<div><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div> 45<div><?php the_content(); ?></div> 46 47<?php endwhile; else : ?> 48 49<div>該当なし</div> 50 51<?php endif; 52wp_reset_query(); ?> 53 </div> 54 </div> 55 56<?php get_sidebar(); ?> 57 58 </div> 59</div> 60<?php get_footer(); ?>

Search Everythingというプラグインでexchangeのカスタム投稿も検索対象にするようにしております。

検索窓でキーワードを入れて検索すると問題なく表示されます。
しかしカスタム投稿のタグをチェックボックスで選択すると検索結果に表示されません。

問題はどこにございますでしょうか?
お詳しい方ご教授お願い致します。

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

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

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

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

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

guest

回答3

0

$taxquerysp[] = array(

確認してないので分からないのですが、この時点で2次元配列になってません?

query_posts( array( 'tax_query' => $taxquerysp,

ここを分解すると

'tax_query' => array( array( 'taxonomy'=>'exchange', 'terms'=> $coin_tag, 'include_children'=>false, 'field'=>'slug', 'operator'=>'AND' ); );

こうなってますが、この部分は正しく動作してますか?

多分こうだと思うのですが↓

$taxquerysp = array( 'taxonomy'=>'exchange',

投稿2018/01/29 01:53

編集2018/01/29 01:55
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

テンプレートファイル内でquery_postsを使用している点が気になりますが、その点はひとまず置いておき、ざっと見て気になったところだけですが。

PHP

1 'taxonomy'=>'exchange',

この行が間違っていませんか。

投稿2018/01/27 04:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yoshimitsu41

2018/01/27 06:41

'taxonomy'=>'exchange', を 'taxonomy'=>'coin_tag', に修正しましたがやはりタグで検索した場合に表示がされませんでした。 デバッグのプラグイン「Query Monitor」でタグで検索した際に出るエラーメッセージが下記になります。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))) AND wp_posts.post_type IN ('post', 'page', 'attachment', 'exchange') AND (w' at line 3 【以下はクエリー】 SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (2) ) AND ((())) AND wp_posts.post_type IN ('post', 'page', 'attachment', 'exchange') AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10 他に問題点はわかりますでしょうか?
退会済みユーザー

退会済みユーザー

2018/01/28 04:49

AND ((())) が原因のように見えます。 記載されたコードの範囲内だとWP4.9.1で上記のクエリを再現できませんでしたが、クエリ生成に関わるあたりを見直してみてはどうでしょうか。
yoshimitsu41

2018/01/29 02:37

ありがとうございます!解決致しました!
guest

0

php

1#search.php 2 3<?php 4$args = array( 5 'post_type' => 'exchange', 6 'orderby' => 'meta_value', 7 'meta_key' => 'ranking', 8 'order' => 'ASC', 9 'tax_query' => array( 'relation' => 'AND', 10 array('taxonomy' => 'coin_tag', 'terms' => $_GET['coin_tag'], 'field' => 'slug','operator' => 'AND'), 11 array('taxonomy' => 'tokucho_tag', 'terms' => $_GET['tokucho_tag'], 'field' => 'slug','operator' => 'AND') 12 ), 13); 14query_posts($args); 15 ?> 16

投稿2018/01/29 02:39

yoshimitsu41

総合スコア36

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問