• 解決済 ShinichiN

    (@shinichin)


    http://www.warna.info/archives/287/
    に書かれた、複数のカスタムタクソノミーによる絞り込みの実装について質問です。

    複数のカスタムタクソノミーを設定しております。
    ポストタイプは「投稿」のみです。

    カスタムタクソノミーは、6つ設定しているのですが、
    例示のため3つを、function.phpに書き込んだまま書かせてください。

    register_taxonomy(
    	'prefecture',
    	'post',
    	Array(
    		'label'=> '地域',
    		'hierarchical' => true
    	)
    );
    
    register_taxonomy(
    	'age',
    	'post',
    	Array(
    		'label'=> '年齢',
    		'hierarchical' => true
    	)
    );
    register_taxonomy(
    	'rain',
    	'post',
    	Array(
    		'label'=> 'お天気',
    		'hierarchical' => true
    	)
    );

    ここで、やりたいのは、テーマのindex.phpやウィジェットなどにフォームを設置して、ユーザが指定した条件の投稿記事の一覧を得たいと思っています。

    フォームの表示については、最悪手入力でも可能なのですが、検索結果をどのテンプレートファイルで表示させ、またそのために上記ブログ記事で書かれている$searched_postsをどのようにして、そのファイルに渡せば良いのかが、分からずにおります。

    どうぞよろしくお願い致します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター jim912

    (@jim912)

    ShinichiNさん、こんにちは。

    どのテンプレートで表示させるかについては、サイト設計によります。
    そのまま表示させたいのであれば、index.phpでもいいし、どこかほかのページで表示させたいのであれば、結果表示用のページテンプレートを作成してあげればよいです。

    get_postsを行うのは、検索結果を表示するページになりますから、$searched_posts は、そのテンプレート内でループさせればいい話です。

    あと、難しいのはPOSTで送信する場合のページング処理ですね。

    トピック投稿者 ShinichiN

    (@shinichin)

    jim912さん、ありがとうございます。

    まだちゃんと分かっていないのですが、やってみたいと思います。
    とりあえず、フォームも検索結果もトップページに表示させ、

    if ( $searched_posts ) {
    	検索結果表示ループ;
    } else {
    	通常のループ;
    }

    というようにしてみようと思います。

    あと、難しいのはPOSTで送信する場合のページング処理ですね。

    とありますが、前ページのサイドバーにフォームを設置した場合、どのように検索項目の値をトップページ(又は、検索用に用意したページ)に渡せばいいのかが分かりません。

    とりあえず、

    <form action="トップページ又は、検索結果表示用ページのURL"></form>

    として、実験してみたいと思います。

    進みましたら、またご報告と質問をさせていただきます。

    ありがとうございました。

    トピック投稿者 ShinichiN

    (@shinichin)

    トップページindex.phpに上記コードのみ設置してみました。
    *まだフォームはなく、値は手打ちです。

    質問は、get_postsでループさせているのですが、1件目の検索結果が繰り返されてしまい、2件目以降が順番に出てきてくれません。

    直下に通常のループが設置されているため、バッティングしているのかと思い、ループを外してみましたが結果は変わりませんでした。

    また、var_dumpするときちんと2件目以降が表示されるので取得は出来ていると思うのですが、、
    お分かりでしたら教えてくださいませ!

    <?php
    $asobi_arg = array (
    	'post_status' => 'publish', //公開記事のみから抽出
    	'post_type' => 'post', //ポストタイプは「投稿」のみ
    	'tax_query' => array(
    		'relation' => 'AND', // 各タクソノミーのAND検索に指定。ORも可能
    		array(
    			'taxonomy' => 'category', //カテゴリー
    			'field' => 'slug', //スラッグで検索
    			'terms' => 'museum',  //array('MR','FR'), // 配列も可能だけど、とりあえずアウトドアのみで
    			'include_children' => true, // サブカテゴリを含める
    			'operator' => 'IN' //いずれかに合致、NOT IN(いずれにも合致しない)、AND(全てに合致)もある
    		),
    		array(
    			'taxonomy' => 'prefecture', //地域
    			'field' => 'slug', //スラッグで検索
    			'terms' => 'tokyo',  //array('MR','FR'), // 配列も可能だけど、とりあえず東京のみで
    			'include_children' => true, // サブカテゴリを含める
    			'operator' => 'IN' //いずれかに合致、NOT IN(いずれにも合致しない)、AND(全てに合致)もある
    		)
    	)
    );
    $asobi_posts = get_posts( $asobi_arg );
    
    foreach($asobi_posts as $asobi_post)  {
    	setup_postdata($asobi_post);
    	?> <h1><?php the_title() ?></h1><?php
    }
    ?>
     <?php var_dump($asobi_posts); ?>
    トピック投稿者 ShinichiN

    (@shinichin)

    すみません、上記の1件目が複数回(検索結果分)表示されてしまう件、少し進展しました。

    下記のコードで取り出したところきちんと表示されました。
    foreach文だけですが、下記です。

    foreach($asobi_posts as $asobi_post)  {
    	setup_postdata($asobi_post);
    	echo $asobi_post->guid;
    	echo $asobi_post->post_title;
    }

    ですが、この方法だと、
    the_title()the_date()the_meta()などのテンプレートタグが使えず、困ってしまいます。。

    query_posts() で試してみたいと思います。

    トピック投稿者 ShinichiN

    (@shinichin)

    情景、1件目が出てきてしまうところ、自己解決いたしました。
    http://ja.forums.wordpress.org/topic/514?replies=14のIKEDA Yurikoさんの回答のように、
    global $postの挿入などで表示されるようになりました。

    参考までに、下記がコードです。

    global $post;
    $asobi_arg = array (
            // 同じまま
    );
    $asobi_posts = get_posts( $asobi_arg );
    
    foreach($asobi_posts as $post)  {
    	setup_postdata($post);
    	?><h1><?php the_title() ?></h1><?php
    	?><h2><?php the_date() ?></h2><?php
    }

    引き続き、フォームを作ったり、トップページではないところから検索ができるようにしていきますが、質問内容が別の内容になってしまいますので、ここは一度解決済みとさせていただきます。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「複数カスタムタクソノミーでの絞り込みについて」には新たに返信することはできません。