我希望在类别页面顶部有一个下拉菜单,以便我可以按日期过滤帖子。
我很可能不得不使用自定义字段,但这不是问题。
我知道您可以使用 GET 样式变量进行自定义帖子查询,但是启用漂亮的 URL 后,我似乎无法使用 GET 变量来过滤特定帖子(例如www.domain.com/category/?orderby=title&order=ASC
等)
我曾尝试寻找插件,但似乎没有什么能满足我的需要,而且我还注意到这里有很多关于类似主题的讨论,但没有适合我的情况的解决方案。
我希望在类别页面顶部有一个下拉菜单,以便我可以按日期过滤帖子。
我很可能不得不使用自定义字段,但这不是问题。
我知道您可以使用 GET 样式变量进行自定义帖子查询,但是启用漂亮的 URL 后,我似乎无法使用 GET 变量来过滤特定帖子(例如www.domain.com/category/?orderby=title&order=ASC
等)
我曾尝试寻找插件,但似乎没有什么能满足我的需要,而且我还注意到这里有很多关于类似主题的讨论,但没有适合我的情况的解决方案。
一般查询是这样的:
<?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();
?>
我正在寻找按日期搜索的帖子。无法在 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');
你可以注意到这个过滤器会自动检查传递的参数是字符串还是日期。米使用
$query->set('post_type', 'post')
要获得发布结果,否则它也会获取页面。假设您在每个帖子下都有日期,您可以将 href 添加到该日期。因此,要在 href 末尾添加该日期的所有帖子,请添加搜索参数,例如 ?s=something
http://my.blog?s=1/Jun/2015
等等模板你不需要写你的自定义,而只需使用默认的模板功能,比如have_posts()