投稿日時で絞り込みをしたい
-
手前味噌ですが、日付で絞りこんで検索する方法
http://notnil-creative.com/blog/archives/1638返信ありがとうございます。
3番目に紹介されている方法を
ぜひ使ってみたいのですが、
具体的にどのようにすればいいのでしょうか?functions.phpへの貼り付けの後に
どのようにするのかわからず、困っています・・・参考例はstart_dateとend_dateの両方を指定して検索しないと動かない仕様なので、1週間以内だと、end_dateの方は指定しなくていいように変えたほうがいいですね。
start_dateの渡し方については、ご要望の機能だと1週間前や1ヶ月前の日付を自動で生成しないといけないと思いますので、PHPの日付関連の関数を調べてみてください。
仮に指定して検索フォームで日時を指定して検索する場合は、
本来の検索機能に加えて、別のテキスト入力欄を作成する、
ということでしょうか?また、私がトピックの最初で要望した、
一定期間内の記事だけを表示する、という場合は、
日付の自動生成の機能を作って、
start_dateをドロップダウンなどで
表示する必要がある、
ということでしょうか?はいそうです、WordPressの検索フォームのform要素の中に適当に足す感じです。
<select name="start_date"> <option value="2013-5-27">1ヶ月以内</option> <option value="2013-6-20">1週間以内</option> </select>
hissyさんのヒントを参考にしながら、
以下のようなコードを書いてみたのですが、
ダメでした。なにかアドバイスをいただけませんでしょうか。
<select name="start_date"> <option value="<?php date("Ymd",strtotime("-1 day")); ?>">1日前</option> <option value="<?php date("Ymd",strtotime("-1 week")); ?>">1週間前</option> <option value="<?php date("Ymd",strtotime("-1 month")); ?>">1月前</option> <option value="<?php date("Ymd",strtotime("-1 year")); ?>">1年前</option> </select>
また、以上のようなコードで、
category.phpやauthor.phpなどでも日時の絞り込みが
出来るものなのでしょうか。<option value="<?php date("Ymd",strtotime("-1 day")); ?>">1日前</option>
これだと、出力結果は
<option value="">1日前</option>
になると思います。
<option value="<?php echo date("Y-m-d",strtotime("-1 day")); ?>">1日前</option>
こう変更していただければと。echo 大事。
あと、リンク先の記事の my_search_where 関数を見て欲しいのですが、
if ( $query->is_search() ) {
で、検索結果の時のみ(つまりsearch.phpのときのみ)start_date と end_date で絞り込んでいます。今回はend_dateは不要と思いますが、要は is_search のところの条件を追加して、 is_category や is_author でも有効にすれば良いということですね。たびたびすいません。
<select name="start_date"> <option value="<?php echo date("Y-m-d",strtotime("-1 day")); ?>">1日前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 week")); ?>">1週間前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 month")); ?>">1月前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 year")); ?>">1年前</option> </select>
以上のようなコードで、日付を選択した上で
記事を検索したのですが、機能しませんでした。hissyさんに教えていただいたリンク先の記事は
ただ貼り付けてある状態なのですが、
リンク先のコードを意図的に改善していく必要のほうがあるのでしょうか?リンク先のコードは start_date と end_date の両方がセットされている時のみ絞り込みを行なっていますので、end_date の方は無くても動くように変更しないといけないですね。
いろいろと理解できていないくて申し訳ないです。
検索する時については、
end_dateの方が無くても動くようにはなりました。
ありがとうございます。ただ、category.phpなどで絞り込みが出来るように
なるためにと思い、
is_searchの部分をis_categoryに変更したところ、
サイトに入れなくなってしまいました。また、category.phpの画面上で絞り込みをしようと思い、
以下のようなコードにしてみたのですが、
機能しませんでした。<select name="start_date" onChange="location.href=value;"> <option value="<?php echo date("Y-m-d",strtotime("-1 day")); ?>">1日前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 week")); ?>">1週間前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 month")); ?>">1月前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 year")); ?>">1年前</option> </select>
このようなコードと、hissyさんが示してくださいましたコードとは
関係があるのでしょうか?サイトに入れなくなってしまいました、とは、どういう状態でしょうか?
手間がかかってるようですので手持ちの環境でテストしてみましたが、カテゴリーアーカイブでも問題なく動きますね。function my_query_vars( $public_query_vars ) { $public_query_vars[] = 'start_date'; return $public_query_vars; } function my_parse_query( $query ) { if ( $query->get('start_date') && !$query->is_category() ) { $query->is_search = true; $query->is_home = false; } return $query; } function my_search_where( $where, $query ) { if ( is_admin() || ! $query->is_main_query() ) return $where; global $wpdb; if ( $query->is_search() || $query->is_category() ) { if ( $query->get('start_date') ) { $start_date = date('Y-m-d', strtotime($query->get('start_date'))); $where .= " AND $wpdb->posts.post_date >= '$start_date'"; } } return $where; } add_filter( 'query_vars', 'my_query_vars'); add_filter( 'parse_query', 'my_parse_query'); add_filter( 'posts_where', 'my_search_where', 10, 2 );
サイトに入れなくなってしまった、というのは
画面が真っ白になってしまった状態です。
説明不足で申し訳なかったです。hissyさんが教えてくださいましたコードを貼りつけ、
私が1つ手前で記載したドロップダウンのコードを
カテゴリーアーカイブに貼り付けて動かしてみたのですが、
404ページになってしまいました。
(検索のときの絞り込みでは問題が無かったのですが・・)hissyさんのコードと私のドロップダウンメニューは
直接は関係ないものなのでしょうか。ドロップダウンメニューのコードも問題あると思いますよ。
まあ、要はこういうURLにアクセスすると動くようにしたのが上のコードです。http://example.com/?cat=1&start_date=2008-09-01
http://example.com/?s=hogehoge&start_date=2008-09-01hissyさん
返信が遅くなってすいませんでした。いろいろと考えて、また別のトピックをたてて
質問することにしてみます。お手数をかけました。
ありがとうございました。あれ、もう少しで出来そうだったと思うのですが…。
location.href=value;
だと、カテゴリーが引き継がれないところが問題でしょうね。先に投稿したカテゴリーアーカイブに対応させたコードをfunctions.phpに追加し、下記のように修正したコードをテンプレートに追加すれば、動くと思いますよ。<?php if(is_category()){ $cat_id = get_queried_object_id(); ?> <form action="<?php echo home_url(); ?>" method="get"> <input type="hidden" name="cat" value="<?php echo $cat_id; ?>" /> <select name="start_date" onchange="submit(this.form)"> <option>絞り込み</option> <option value="<?php echo date("Y-m-d",strtotime("-1 day")); ?>">1日前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 week")); ?>">1週間前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 month")); ?>">1月前</option> <option value="<?php echo date("Y-m-d",strtotime("-1 year")); ?>">1年前</option> </select> </form> <?php } ?>
- トピック「投稿日時で絞り込みをしたい」には新たに返信することはできません。