5年以上前に作られた、Wordpressサイトの改装を任されています。(前制作者とは面識なし)
###前提・実現したいこと
このページは、投稿を検索するページですが
search.php等が使われておらず、独自にプログラミングされているようです。
現状「検索」ボタンを押さないと投稿が表示されませんが、
「はじめから全投稿が表示されている」
かつ「検索ボタンを押すと絞り込まれる」
ようにしたいです。
色々やってみたのですがうまくいかず、
そもそも考え方が間違っている気がして質問させていただいております。。
###該当のソースコード
全体的に無駄が多くて見づらいかと存じますが何卒ご容赦ください。
<form method="get" action="<?php echo the_permalink();?>"> <table> <tr> <td>カテゴリ</td> <td><?php //投稿のカテゴリーをドロップメニューとして表示 wp_dropdown_categories("depth=0&orderby=id&hide_empty=1&show_option_all=すべて&selected=". $_GET['cat']); ?></td> <td rowspan="2" style="padding-left:20px;padding-bottom:15px;"> <input type="submit" name="btn_submit" value="検索" style="cursor:pointer;" /></td> </tr> <tr> <td>年</td> <td><select name="y"> <option value="">すべて</option> <?php //投稿年数をドロップメニューとして表示 query_posts('posts_per_page=-1'); $year=0; while (have_posts()) : the_post(); if ($year!=get_the_date('Y')) { $year=get_the_date('Y'); ?> <option value = <?php echo $year; ?><?php if ($year == $_GET['y']) echo ' selected'?>><?php echo $year; ?></option> <?php } endwhile; wp_reset_query(); ?> </select></td> </tr> </table> </form> </div><!--search--> <div class="wrap cf"> <?php $paged = ( get_query_var('page') ) ? get_query_var('page') : 1; if (get_query_var('cat') <> "" || get_query_var('y') <> "") { //もしカテゴリーまたは施工年に値があれば(検索ボタンが押されたら?) query_posts($query_string .'&posts_per_page=12&cat='. $_GET['cat'].'&year='. $_GET['y'].'&paged='.$paged);//検索結果を出力 ?> <p class="search">検索結果 : <?php echo $wp_query->found_posts; ?>件</p> <?php //ページナビ if(function_exists('wp_pagenavi')) { wp_pagenavi(); } $i = 0; ?> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php if (($i <> 0) && ($i % 4 == 0)) { ?> <?php } ?> <div id="post-<?php the_ID(); ?>" class="post img-left clearfix"> <h3 class="title"><a href="<?php the_permalink() ?>" class="fancybox"> <?php //20文字以上のタイトル省略 if(mb_strlen($post->post_title, 'UTF-8')>20){ $title= mb_substr($post->post_title, 0, 20, 'UTF-8'); echo $title.'…'; }else{ echo $post->post_title; } ?> </a></h3> <p class="time"><?php the_time("Y年m月") ?></p> <?php if (has_post_thumbnail()) : ?> <p class="thumb"><a href="<?php the_permalink(); ?>" class="fancybox"><?php the_post_thumbnail('thumbnail'); ?></a></p> <?php else : ?> <p class="thumb"><a href="<?php the_permalink(); ?>" class="fancybox post_noimage">no image</a></p> <?php endif ; ?> </div> <?php $i++; endwhile; else: ?> <div class="post"> <p>該当する記事がありません</p> </div> <?php endif; ?> <?php wp_reset_query(); ?> <?php } ?> </div><!--wrap-->
###試したこと
if (get_query_var('cat') <> "" || get_query_var('y') <> "") { ー中略ー <?php endif; ?> ```上記部分をさらにループに入れ込んで、 検索ボタンを押す前と押した後で表示分けすればよいかと考え、 前段階としてループの外(</div><!--search-->の直下)に全記事を読み込むコードを書いたのですが(内容は上記のhave_posts()のループと全く同じにしました) そもそも投稿を読み込んでくれず、なぜか固定ページの「実績検索」(本ページ)が1件だけ表示されるだけでした。 どのように書けばいいのか、そもそも実現できるのか、自分では手詰まりになってしまったため、何か手がかりでもよいので助言いただけませんでしょうか。 (ちなみに、投稿一覧を新たに作り、search.phpを使って普通に絞り込み検索をする方法もためしてみたのですが、年別検索のコードがどうしてもうまく書けず、挫折しました。こちらの方が簡単でしょうか…) ###補足情報(言語/FW/ツール等のバージョンなど) wordpress4.8.2 ※古いコードのため、非推奨の「query_posts」を使っていたりしますが、そのあたりは全件表示が解決できてから少しずつ直そうと考えています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/14 17:26 編集
2017/10/14 17:16