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

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

ただいまの
回答率

90.37%

  • PHP

    25087questions

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

  • WordPress

    9408questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 524

yoshimitsu41

score 26

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

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

【タクソノミー名】
coin_tag

【問題になっている点】

#searchform.php

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>">
    <label for="s" class="assistive-text">検索</label>
    <input type="text" name="s" id="s" placeholder="検索" />

    <div>タグまたはカスタムタクソノミー</div>
<?php
$taxonomy_name = 'coin_tag';
$taxonomys = get_terms($taxonomy_name);
if(!is_wp_error($taxonomys) && count($taxonomys)):
    foreach($taxonomys as $taxonomy):
        $tax_posts = get_posts(array('post_type' => get_post_type('exchange'),'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
        if($tax_posts):
?>
<label><input type="checkbox" name="coin_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br>
<?php
        endif;
    endforeach;
endif;
?>
    <input type="submit" value="検索" />
</form>
#search.php


<?php
$s = $_GET['s'];
$coin_tag = $_GET['coin_tag'];
//tax_query用
if($coin_tag){
    $taxquerysp[] = array(
            'taxonomy'=>'exchange',
            'terms'=> $coin_tag,
            'include_children'=>false,
            'field'=>'slug',
            'operator'=>'AND'
            );
}
?>

<div>検索条件</div>
<?php if($s){ ?>検索キーワード:<?php echo $s; ?><br><?php } ?>
<?php
if (is_array($coin_tag)) { ?>タグ(カスタムタクソノミー):<?php
foreach($coin_tag as $val){
if ($val === end($coin_tag)) {
echo get_term_by('slug',$val,"coin_tag")->slug;
    }else{
echo get_term_by('slug',$val,"coin_tag")->slug.", ";
}
}
}
 ?>

<div>検索結果</div>

<?php
query_posts( array(
    'tax_query' => $taxquerysp,
    's' => $s,
    )
);
?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<div><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div><?php the_content(); ?></div>

<?php endwhile; else : ?>

<div>該当なし</div>

<?php endif;
wp_reset_query(); ?>
            </div>
        </div>

<?php get_sidebar(); ?>

  </div>
</div>
<?php get_footer(); ?>


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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

$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',

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

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

 'taxonomy'=>'exchange',


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/27 15: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 13:49

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

    キャンセル

  • 2018/01/29 11:37

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

    キャンセル

0

#search.php

<?php
$args = array(
        'post_type' => 'exchange',
        'orderby' => 'meta_value',
        'meta_key' => 'ranking',
        'order' => 'ASC',
        'tax_query' => array( 'relation' => 'AND',
                array('taxonomy' => 'coin_tag', 'terms' => $_GET['coin_tag'],  'field' => 'slug','operator' => 'AND'),
                array('taxonomy' => 'tokucho_tag', 'terms' => $_GET['tokucho_tag'],  'field' => 'slug','operator' => 'AND')
        ),
);
query_posts($args);
 ?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25087questions

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

  • WordPress

    9408questions

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