【问题标题】:Wordpress custom post type paginationWordpress 自定义帖子类型分页
【发布时间】:2011-03-20 12:49:46
【问题描述】:

我正在尝试使用 WordPress 中的 wp pagenavi 插件和自定义帖子类型(投资组合页面)进行分页,但我没有运气。

这是我的投资组合页面的精简版:

<?php get_header(); ?>

<?php
  $type = 'portfolio';
  $args=array(
    'post_type' => $type,
    'post_status' => 'publish',
    'paged' => $paged,
    'posts_per_page' => 1,
    'caller_get_posts'=> 1
  );
  $temp = $wp_query;  // assign original query to temp variable for later use   
  $wp_query = null;
  $wp_query = new WP_Query($args); 
?>

<?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>
...
<?php endwhile; else : ?>
...
<?php endif; ?>

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
    $wp_query = null; $wp_query = $temp; ?>

<?php get_footer(); ?>

我的固定链接设置为:

/%postname%/

我已经重新保存了它们。

当我翻到作品集的第二页时,我看到的是 404 页。知道为什么会这样吗?

感谢您的帮助。

【问题讨论】:

标签: wordpress pagination custom-post-type


【解决方案1】:

我认为您遇到了旧的 WordPress URL 重定向的错误情况。

尝试添加这个过滤器来阻止它:

add_filter('redirect_canonical','my_disable_redirect_canonical');

function my_disable_redirect_canonical( $redirect_url ) {
    if ( is_single( 'portfolio' ) )
    $redirect_url = false;
    return $redirect_url;
}

【讨论】:

  • 准确,但是,在许多情况下,该行应该是: if ( get_post_type( $post ) == 'portfolio' && is_archive() ) $redirect_url = false;
【解决方案2】:

自定义帖子类型数字分页 -> http://designphiliconline.blogspot.in/2012/08/wordpress-custom-post-type-pagination.html

这适用于将永久链接设置为默认或帖子名的情况

【讨论】:

  • 请总结您链接到的帖子;简单地提供一个链接是没有帮助的。
【解决方案3】:

我在 Wordpress 中遇到了分页问题,​​无法修复,所以我推出了自己的 WP_Query 类扩展 -> MF_Query

只需使用 MF_Query 代替 WP_Query,然后使用 $your_query-&gt;next("Next Page")$your_query-&gt;prev("Previous Page") 添加下一个和上一个链接(文本有默认值,因此不需要参数。

您需要将参数作为数组直接传递给类初始化,这与标准 WP_Query 的各种选项相对应。

这有点hacky,但它有效!

【讨论】:

    【解决方案4】:
    <?php
    
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts(array(
        'post_type' => 'portfolio',
        'paged' => $paged,
        'caller_get_posts' => 1,
        'posts_per_page' => T_Panel('portfolio_page_num')
    ));
    if (have_posts()) :
        while (have_posts()) : the_post();
            // your content loop her
        endwhile;
        wp_reset_query();
    endif;
    
    ?>
    

    【讨论】:

      【解决方案5】:

      这是我将分页变量传递到 CPT 查询以进行导航的方式,您可以有不同的方法来执行此操作,但这是唯一一个使用 WP_QUERY 对我有用的方法。并且不需要任何导航插件,只需标准导航链接。

      你应该把这条线放在你 WP_QUERY 之前

       $paged = 1;  
       if ( get_query_var('paged') ) $paged = get_query_var('paged');  
       if ( get_query_var('page') ) $paged = get_query_var('page');
      
      $temp = $wp_query; 
                      $wp_query = null; 
                      $wp_query = new WP_Query(); 
                      $wp_query->query('post_type=portafolio&showposts=7&orderby=post_date&order=DESC&paged='.$paged); 
       while ($wp_query->have_posts()) : $wp_query->the_post(); 
      
       //post format
      get_template_part("content");?>
      
        <?php endwhile; ?>
      
        //pagination links here
      
        <?php 
            $wp_query = null; 
            $wp_query = $temp;  // Reset
         ?>
      

      修改循环文件后,将其添加到您的functions.php 中,该变量将用于计算您所在的页面。

       function paginate() {  
         global $wp_query, $wp_rewrite;  
         $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;  
      
         $pagination = array(  
          'base' => @add_query_arg('page','%#%'),  
          'format' => '',  
          'total' => $wp_query->max_num_pages,  
          'current' => $current,  
          'show_all' => true,  
          'type' => 'plain'  
          );  
      
        if ( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );  
      if ( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' =>   get_query_var( 's' ) );  
      echo paginate_links( $pagination );  
      }  
      
       function portafolio_posts_per_page( $query ) {  
          if ( $query->query_vars['post_type'] == 'portafolio' ) $query->query_vars['posts_per_page'] = 10;  
      return $query;  
      }  
       if ( !is_admin() ) add_filter( 'pre_get_posts', 'portafolio_posts_per_page' );     
      

      您也可以阅读这篇文章,它解释了链接模板的方法,这将解决我们在涉及自定义查询时必须处理的分页问题。

      http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

      【讨论】:

        猜你喜欢
        • 2014-05-15
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 2016-08-08
        • 2012-11-29
        • 2017-06-04
        • 2013-06-22
        相关资源
        最近更新 更多