web-dev-qa-db-ja.com

投稿日を使用して投稿を検索する

投稿された日付に基づいて投稿を検索します。たとえば、検索ボックスに、2011年11月22日に配置し、2011年11月22日の間のすべての投稿を表示します。これを行う方法に絶望的です。任意の助けは非常に高く評価されます。私はテーマを使っています、それはsearch.phpはこのようなものになります。このsearch.phpにあなたが与えたクエリを単に挿入することができますか?私はワードプレスの初心者イム以来あなたが与えたそれらのコードをどこに置くべきかわからない。お時間をいただきありがとうございます。

<?php the_search_query(); ?>
<?php if (have_posts()) : while (have_posts()) :the_post(); 
$arc_year = get_the_time('Y'); 
$arc_month = get_the_time('m'); 
$arc_day = get_the_time('d'); 
<?php the_permalink(); ?>    
<?php the_title();
<?php the_time('F j, Y'); ?> at <?php the_time('g:i a'); ?>
<?php dp_attachment_image($post->ID, 'thumbnail', 'alt="' . $post->post_title . '" class="thumbnail"'); ?>
<?php the_excerpt(); ?>
<?php the_permalink(); ?>">READ MORE
1
Pete

この特定の検索ページ用のカスタムページテンプレートを作成できます http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

その後、いくつかの$ _GET変数を設定します(メソッドGETのフォームを使用)。

そしてこれらの$ _GET値に対してカスタムクエリを実行します。

$date_query = new WP_Query( 'year=' . $_GET['year'] . '&monthnum=' . $_GET['month'] . '&day=' . $_GET['day'] );

それからあなたのカスタムループ:

<?php if ($date_query->have_posts()) : while ($date_query->have_posts()) : $date_query->the_post();?>
   <?php the_title(); ?>
<?php endwhile; endif; ?>

更新:

時間がかかりすぎてすみません、ちょっと忙しいです。

これがあなたの問題に対する解決策です:

あなたのfunction.phpにこれを入れて

function my_date_search() {
    if(is_search()) {
        $search_query = get_search_query();
        $months = array( 1 => "January", 2 => "February", 3 => "March", 4 => "April", 5 => "May", 6 => "June", 7 => "July", 8 => "August", 9 => "September", 10 => "October", 11 => "November", 12 => "December" );

        foreach($months as $month => $month_name) {
            if(stristr($search_query, $month_name)) {
                $m = $month;
                preg_match('/(19[0-9][0-9]|20[0-9][0-9])/', $search_query, $year);
                if($year)
                    $y = $year[0];
                preg_match('/^[0-3]{0,1}[0-9]{1} /', $search_query, $day);
                if($day)
                    $d = $day[0];
            }
        }

        if(isset($d) && isset($m) && isset($y)) {
            $wd = explode($y, $search_query);
            if($wd[1])
                $query_string = 's=' . trim($wd[1]) . '&year=' . $y . '&monthnum=' . $m . '&day=' . $d;
            else
            $query_string = 'year=' . $y . '&monthnum=' . $m . '&day=' . $d;
            query_posts($query_string);
        }
    }
}
add_action('get_header', 'my_date_search');

「2011年6月14日」のようなものを検索すると、2011年6月14日の検索ページが表示されます。 。

たぶんあなたにとってより簡単な/より良い解決策がある、しかしこれはうまくいくでしょう。

2
Rob Vermeer

あなたはWP_Queryの時間パラメータを使うことができてそして非常に小さいコードでこれをすることができるはずです。ドキュメントをチェックしてください。このWP_Queryはsearch.phpにあるループを置き換えます。あなたがフィルタリングしたい他の検索結果を得るために追加の引数を追加する柔軟性を持つべきです。

0
mor7ifer