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

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

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

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

PHP

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

Q&A

解決済

2回答

2679閲覧

search.phpを使わない検索ページで、はじめから投稿を全件表示したい

st20

総合スコア7

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/10/13 07:14

編集2017/10/14 17:25

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">検索結果&ensp;:&ensp;<?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」を使っていたりしますが、そのあたりは全件表示が解決できてから少しずつ直そうと考えています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

URLを管理画面からパラメータを含めたものに変更は出来ないと思います。

多分、こんな感じにしておけば良いと思いますが。

<?php } ?> </div><!--/jisseki_wrap-->

<?php }else{ ?> <?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; endif; ?> <?php } ?> </div><!--/jisseki_wrap-->

###追記
追加したhave_postsにそれらの投稿を全部抜き出す条件を指定してやったらどうでしょう?

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php $args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', ); $query = new WP_Query( $args ); if ( $query->have_posts() ) : while ( $query->have_posts() ): $query->the_post(); ?>

カテゴリーや投稿タイプ等の必要な情報を当て込んでください。

関数リファレンス/WP Query
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query

投稿2017/10/13 13:49

編集2017/10/13 14:41
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

st20

2017/10/14 17:26 編集

ありがとうございます! 試してみたところ、うまくいきそうではあるのですが、やはり自分で試行錯誤していた時と同じく、なぜか固定ページの「実績検索」(このページ自身)が1件だけ表示されてしまいます。 検索結果から固定ページを除いて、投稿 'post' のみに限定する方法が、search.phpを使っているものであれば検索で見つかるのですが、いまの条件ですとどうすればよいのかわからず… 私の方でも今一度調べてみたいと思いますが もし解決策がおわかりでしたら、ご教示いただけますとありがたいです…!
st20

2017/10/14 17:16

追記ありがとうございます。ページ送りを使うために下記のように改変しましたが、ほぼそのままで使わせていただきました。 非常に助かりました!これからじっくりコードを見て、なぜ自分で実現できなかったか考えてみようと思います。本当にありがとうございました! ``` <?php $args = array( 'post_type' => 'post', 'posts_per_page' => 12, 'post_status' => 'publish', ); $my_query = new WP_Query( $args ); //ページナビ $my_query = new WP_Query( array( 'paged' => $paged , 'posts_per_page' => 12 )); if(function_exists('wp_pagenavi')) { wp_pagenavi(array('query' => $my_query)); } $i = 0; if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ): $my_query->the_post(); ?> ```
guest

0

的はずれな回答でしたらすみません。
メニューから実績検索へのリンクを
http://www.kawasaki-sekkei.com/jisseki/?cat=0&btn_submit=%E6%A4%9C%E7%B4%A2&y=
にしちゃうとかはやはりダメなのでしょうか?

投稿2017/10/13 07:47

ponzu1990

総合スコア57

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

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

st20

2017/10/13 11:34

なるほど…!盲点でした。 他に手がないようなら、そうしてみようと思います。 しかしながら、グローバルメニューからのリンクなのでURLは綺麗な方が、より理想には近いです。 できれば、やはりプログラムでなんとか一覧を出したいのですが、難しいでしょうか。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問