提交新查询后如何刷新分页链接?

时间:2012-10-29 22:32:30

标签: wordpress pagination

我为博客帖子修改了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;
}

1 个答案:

答案 0 :(得分:0)

进行自定义查询时,需要显式调用查询的每个参数。因此,标准的消失,分页情况也是如此。

根据您创建此新查询的方式,您可以尝试:

  • 例如,在$ query_string的开头连接 $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;
    }

如果声明,你的其他东西似乎失败了。如果这解决了您的问题,请告诉我。