2017-02-15 62 views
1

我有一个页面,我正在使用new WP_Query来显示某个类别的帖子,用户可以按发布年份过滤帖子。这里是我的查询代码:通过WP_Query过滤某些过滤器时出现404错误,但不是其他过滤器

if (isset($_GET['action'])){ 
    $orderby = $_GET['orderby']; 
    $order = $_GET['order']; 
    $year = $_GET['year']; 
} 
$args = array(
    'category_name' => 'films', 
    'orderby' => $orderby, 
    'order' => $order, 
    'year' => $year 
); 
$my_query = new WP_Query($args); 

我有一个表格,用户可以选择通过一年来过滤帖子:

<form class='post-filters'> 
    <select name="orderby"> 
     <option value='date'>Order By Date</option> 
     <option value='title'>Order By Title</option> 
    </select> 
    <select name="order"> 
     <option value='DESC'>Descending</option> 
     <option value='ASC'>Ascending</option> 
    </select> 
    <select name="year"> 
     <option value=''>All</option> 
     <option value='2016'>2016</option> 
     <option value='2015'>2015</option> 
    </select> 
    <input type='submit' value='Filter!'> 
</form> 

一切工作正常,除非我尽量选择2016年之前,一个过滤器,我得到一个404错误。当年有帖子,如果我在WP_Query中对2016的值进行硬编码,它就可以工作。

任何想法可能会出错?

回答

0

一些变量名称在WordPress中是“保留”的。 $year是一个将无法正常工作 - 用相同$month$day等更改您选择的名字像year_filter然后:

if (isset($_GET['action'])){ 
    $orderby = $_GET['orderby']; 
    $order = $_GET['order']; 
    $year_filter = $_GET['year_filter']; 
} 
$args = array(
    'category_name' => 'films', 
    'orderby' => $orderby, 
    'order' => $order, 
    'year' => $year_filter 
); 
$my_query = new WP_Query($args); 

我敲打我的头靠在桌子许多次,直到我想通了这一点一一段时间以前。

+0

刚刚试过这个,404消失了,但年份过滤器仍然不起作用 - 无论过滤器设置为什么,都会显示所有帖子。仍然在这里失踪 –