0

我修改了博客文章的 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 分页链接以使其适用于其他过滤器?

这是我用于查询参数的代码:

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;
}
4

1 回答 1

0

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

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

  • 在 $query_string 开头连接,例如 $query = new WP_Query( $query_string . 'order=DESC' )在 Codex 中解释:

如果要保留用于生成当前查询的原始查询参数信息,然后添加或覆盖某些参数,可以在对 query_posts() 的调用中使用 $query_string 全局变量。

  • 从默认查询中获取分页并在您的自定义查询中使用它 $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;
    }

else if 语句似乎在你身上失败了。让我知道这是否解决了您的问题。

于 2012-10-29T22:54:56.117 回答