ShinichiNさん、こんにちは。
どのテンプレートで表示させるかについては、サイト設計によります。
そのまま表示させたいのであれば、index.phpでもいいし、どこかほかのページで表示させたいのであれば、結果表示用のページテンプレートを作成してあげればよいです。
get_postsを行うのは、検索結果を表示するページになりますから、$searched_posts は、そのテンプレート内でループさせればいい話です。
あと、難しいのはPOSTで送信する場合のページング処理ですね。
jim912さん、ありがとうございます。
まだちゃんと分かっていないのですが、やってみたいと思います。
とりあえず、フォームも検索結果もトップページに表示させ、
if ( $searched_posts ) {
検索結果表示ループ;
} else {
通常のループ;
}
というようにしてみようと思います。
あと、難しいのはPOSTで送信する場合のページング処理ですね。
とありますが、前ページのサイドバーにフォームを設置した場合、どのように検索項目の値をトップページ(又は、検索用に用意したページ)に渡せばいいのかが分かりません。
とりあえず、
<form action="トップページ又は、検索結果表示用ページのURL"></form>
として、実験してみたいと思います。
進みましたら、またご報告と質問をさせていただきます。
ありがとうございました。
トップページ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); ?>
すみません、上記の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() で試してみたいと思います。
情景、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
}
引き続き、フォームを作ったり、トップページではないところから検索ができるようにしていきますが、質問内容が別の内容になってしまいますので、ここは一度解決済みとさせていただきます。