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

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

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

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

PHP

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

Q&A

解決済

1回答

639閲覧

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

Cabe

総合スコア24

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/12/13 02:27

編集2017/12/13 13:07

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.通常の投稿
のリストができてしまいます。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 09:48

『検索結果がうまくいきません。』とは具体的にどのように上手くいかないのでしょうか?質問に追記してください。
Cabe

2017/12/14 03:47

ご指摘ありがとうございます。追記しました。
退会済みユーザー

退会済みユーザー

2017/12/16 06:30

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

退会済みユーザー

2017/12/16 06:31

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

2017/12/18 01:41

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

回答1

0

自己解決

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

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

投稿2017/12/18 01:41

Cabe

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問