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

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

ただいまの
回答率

90.86%

  • PHP

    18602questions

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

  • WordPress

    6401questions

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

Wordpressのカスタム投稿の絞り込み検索について

解決済

回答 1

投稿 編集

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

Wordpressのカスタム投稿の絞り込み検索を実装したいと思っています。
検索ページでカスタム投稿のタグを取得するところまでは問題ないのですが、検索結果がうまくいきません。
プログラムに関してはまだ初心者でどこの部分に問題があるかのご指摘をいただけたら嬉しいです。
よろしくお願いいたします。

phpのバージョンは5.4
wordpressのバージョンは4.9.1
です。

カスタム投稿の設定はこのようにしています。

function bourgeon_create_post_type(){
    register_post_type( 'class',
    array(
    'labels' => array(
    'name'   => 'クラス',
    'singular_name' => 'クラス',
    ),
    'public' => true,
    'menu_position' => 5,
    'has_archive' => true,
    'supports' => array(
     'title',
     'editor',
     'excerpt',
     'thumbnail',
     'custom-fields',
     ),
     )
     );
}


function bourgeon_create_taxonomies() {

    $labels = array (
    'name'  =>  'クラスの分類',
    'singular-name'  => 'クラスの分類',
    );

    register_taxonomy( 'type', array( 'class' ),
    array (
    'hierarchical' => true,
    'labels' => $labels,
    'show_ui' => true,
    'show_admin_column' => true,
    'show_in_nav_menus' => true,
    )
    );

    //カスタムタクソノミー、タグタイプ
  register_taxonomy(
    'class-tag', 
    'class', 
    array(
      'hierarchical' => false, 
      'update_count_callback' => '_update_post_term_count',
      'label' => 'クラスのタグ',
      'singular_label' => 'クラスのタグ',
      'public' => true,
      'show_ui' => true,
    'has_archive' => true,
    )
  );
}

add_action( 'init', 'bourgeon_create_post_type', 1 );


function.phpにこちらのコードを追記しました。

function custom_search($search, $wp_query  ) {
    //query['s']があったら検索ページ表示
    if ( isset($wp_query->query['s']) ) $wp_query->is_search = true;
    return $search;
}
add_filter('posts_search','custom_search', 10, 2);


検索ページは

<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 = 'class-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('クラス'), 'taxonomy' => $taxonomy_name, 'term' => $taxonomy->slug ) );
        if($tax_posts):
?>
<label><input type="checkbox" name="post_tag[]" value="<?php echo $taxonomy->slug; ?>"><?php echo $taxonomy->name; ?></label><br>
<?php
        endif;
    endforeach;
endif;
?>
    <input type="submit" value="検索" />

seartch.phpは

<?php
$s = $_GET['s'];
$post_tag = $_GET['class-tag'];

//tax_query用
if($post_tag){
    $taxquerysp[] = array(
            'taxonomy'=>'class-tag',
            'terms'=> $post_tag,
            'include_children'=>false,
            'field'=>'slug',
            'operator'=>'AND'
            );
}
?>

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

<div>検索結果</div>

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

<div><?php the_title(); ?></div>
<div><?php the_content(); ?></div>

<?php endwhile; else : ?>

<div>該当なし</div>

<?php endif;
wp_reset_query(); ?>

という記述にしております。

検索結果としては
1.指定したいカスタム投稿とは別のもう一つのカスタム投稿
2.固定ページ
3.通常の投稿
のリストができてしまいます。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • miz

    2017/12/16 15:30

    search.phpの`$post_tag = $_GET['class-tag'];`の行は`$post_tag = $_GET['post-tag'];`でないと値が取得できていないのではないでしょうか。

    キャンセル

  • miz

    2017/12/16 15:31

    `$post_tag`に入っている値が想定している値かどうかを確認してみてください。

    キャンセル

  • NorihisaFujita

    2017/12/18 10:41

    ありがとうございます!!こちらの方法でうまくいきました!!!助かりました!!!!!

    キャンセル

回答 1

check解決した方法

0

search.phpの$post_tag = $_GET['class-tag'];の行は$post_tag = $_GET['post-tag'];でないと値が取得できていないのではないでしょうか。

mizさんのこちらの方法で解決しました。
非常に助かりました。ありがとうございます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • PHP

    18602questions

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

  • WordPress

    6401questions

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