2012-07-04 64 views
1

我期待在類別頁面頂部有一個下拉菜單,允許我按日期篩選帖子。我很可能不得不使用自定義字段,但這不是問題。如何按日期篩選類別文章?

我知道你可以使用GET風格變量進行自定義後查詢,但啓用了漂亮的網址,我似乎無法使用GET變量來過濾特定的職位(如www.domain.com/category/?orderby=title&order=ASC等等等等)

我試圖尋找對於插件來說,但是沒有什麼東西可以跳出來滿足我的需求,而且我也注意到這裏有很多關於類似主題的討論,對於我的情況沒有像樣的解決方案。

回答

2

一般的查詢是這個樣:

<?php $posts = query_posts($query_string . '&orderby=date&order=asc'); ?> 
    <?php if($posts) : ?> 
    //whatever 
      <?php foreach($posts as $post) : setup_postdata($post); ?> 
     //whatever 
      <p><?php the_content(); ?></p> 
       <?php endforeach; ?> 

    <?php endif; ?> 

對於下拉菜單中,你可以做這樣的事情:

$args = $args=array(
     'cat' => $cat_id, 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'orderby' => 'DATE', 
     'order' => 'ASC' // or DESC 
    ); 

<form action="<? bloginfo('url'); ?>" method="get"> 
<select name="page_id" id="page_id"> 
<?php 
global $post; 
$args = array('numberposts' => -1); 
$posts = get_posts($args); 
foreach($posts as $post) : setup_postdata($post); ?> 
       <option value="<? echo $post->ID; ?>"><?php the_title(); ?></option> 
<?php endforeach; ?> 
</select> 
<input type="submit" name="submit" value="view" /> 
</form> 

而另一種選擇:

<?php 
    $cat_id = get_cat_ID('uncategorized'); //your-category 
    $args=array(
     'cat' => $cat_id, 
     'post_type' => 'post', 
     'post_status' => 'publish', 
     'posts_per_page' => -1, 
     'orderby' => 'DATE', 
     'order' => 'ASC' // or DESC 
    ); 
    $my_query = null; 
    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) { 
?> 
    <form name="jump"> 
     <select name="menu"> 
      <?php 
       while ($my_query->have_posts()) : $my_query->the_post(); ?> 
       <option value="<?php the_permalink() ?>"><?php the_title(); ?></option> 
       <?php 

       endwhile; 
      } 
      ?> 
     </select> 
     <input type="button" onClick="location=document.jump.menu.options[document.jump.menu.selectedIndex].value;" value="Go"> 
    </form> 

<?php 
    wp_reset_query(); 
?> 
0

我一直在尋找按日期搜索帖子。無法在stackoverflow上找到合適的解決方案。然後我打印了wp_query對象並將其排序。它爲我工作。在我的情況下,按照標題或日期搜索帖子。這裏是鉤子的代碼。

function SearchFilter($query) { 
if ($query->is_search) { 
    $query->set('post_type', 'post'); 
    // check if query is a date 
    $search_query = $query->query['s']; 
    $date_format  = DateTime::createFromFormat('d/M/Y', $search_query); 
    if ($date_format) 
    { 
     $dte   = date('j',$date_format->getTimestamp()); 
     $month   = date('n',$date_format->getTimestamp()); 
     $year   = date('Y',$date_format->getTimestamp()); 
    } 
    if (isset($dte) && isset($month) && isset($year)) { 
     unset($query->query['s']); 
     unset($query->query_vars['s']); 
     $query->query['date_query'] = array(
        array(
         'year' => $year, 
         'month' => $month, 
         'day' => $dte, 
        ) 
       ); 
     $query->set('date_query', array(
         array(
          'year' => $year, 
          'month' => $month, 
          'day' => $dte, 
         ) 
        ) 
       ); 

    } 
} 
return $query; 
} 

add_filter('pre_get_posts','SearchFilter'); 

爲u可以看到此過濾器,如果傳遞參數是字符串或日期自動檢查。 m使用

$query->set('post_type', 'post') 

得到的帖子結果只有其他明智的它也會獲取頁面。 假設你有每個帖子下的日期你可以添加href到該日期。因此要獲得該日期 的所有帖子像HREF增加的搜索參數的時結束?S =東西

http://my.blog?s=1/Jun/2015 

等ü不需要寫烏爾定製forwhile只使用默認的模板功能,如have_posts()

模板