我为博客帖子修改了WordPress主循环,根据提交的过滤器使其查询并循环浏览不同类型的帖子。
在HTML的开头,有一个包含多个按钮的表单作为选项,它类似于SA站点菜单:问题标签用户徽章未答复。
当访问者点击其中一个菜单按钮时,会提交一个新的WP_Query。
在选项下方,是帖子的循环,取决于提交的过滤器。
php代码基本上是一个带有自定义功能的标准wordpress循环:
$args= !empty($_POST['filter']) ? $_POST['filter']:null;
get_option_nav();
if( my_loop_have_posts(array('filter'=>$args))):
while my_loop_posts(): the_my_loop_post();
get_template_part('contents');
endwhile;
endif;
事情正常,但只有默认过滤器才能获得正确的分页链接。提交新过滤器后,单击分页链接时,会转到默认过滤器的页面。如何修改wordpress分页链接以使其适用于其他过滤器?
这是我用于查询args的代码:
function get_args($args){
$defaults= array(
'order' => 'DESC',
'orderby' => 'modified',
'max_num_pages' =>5,
'paged' => get_paged (),
'post_status' => 'any',
'post_type' => array ('post', 'docs','topics'),
'posts_per_page' => 5,
)
$args = wp_parse_args ( $args, $defaults );
extract ( $args );
if(!empty($args['filter'])){
switch ($args['filter']){
case 'top_voted':
$args['post_type'] = 'docs';
$args['meta_key'] = '_vote_total';
$args['order'] = 'DESC';
$args['orderby']='meta_value_num';
break;
case 'unanswered_questions':
$args['post_type] = 'topics';
$args['blabla'] = 'blabla';
break;
default:
blabla;
break;
}
return $args;
}
和分页的代码:
function get_paged() {
global $wp_query;
if ( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
} elseif ( ! empty( $wp_query->query['paged'] ) ) {
$paged = $wp_query->query['paged'];
}
if ( ! empty( $paged ) )
return (int) $paged;
return 1;
}
答案 0 :(得分:0)
进行自定义查询时,需要显式调用查询的每个参数。因此,标准的消失,分页情况也是如此。
根据您创建此新查询的方式,您可以尝试:
$query = new WP_Query( $query_string . 'order=DESC' )
正如食典委解释的那样:如果要保留原始查询参数信息 用于生成当前查询,然后添加或覆盖一些 参数,您可以在调用中使用$ query_string全局变量 to query_posts()。
$paged = get_query_var('paged'); $query = new WP_Query( array( 'paged' => $paged ) );
在你的情况下,你的get_paged()函数有问题。我测试了它并且它不起作用,但我没有发现错误。相反,我尝试了我经常使用的东西,它对我有用:
function get_paged() {
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) { $paged = get_query_var('page');
} else { $paged = 1; }
return $paged;
}
如果声明,你的其他东西似乎失败了。如果这解决了您的问题,请告诉我。