WordPress自定义文章类型分页

5

我尝试使用 wp pagenavi 插件和自定义文章类型(作品集页面)在WordPress上实现分页,但我没有成功。

这是我的作品集页面的简化版本:

<?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页面。你有任何想法这是为什么吗?

谢谢帮助。


3
如果其他人遇到相同的问题,可以在这里找到解决方法:http://wordpress.org/support/topic/429149?replies=1#post-1616810。 - Joe
为什么不把这个作为答案并标记为已接受的呢? - Kev
5个回答

2

我觉得你遇到了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; - Imperative

1

1
请总结您链接的帖子;仅提供链接是没有帮助的。 - LittleBobbyTables - Au Revoir

0
<?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;

?>

0

这是我将分页变量传递到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/


0

我在WordPress中遇到了分页问题,无法解决,所以我自己扩展了WP_Query类 -> MF_Query

只需使用MF_Query替换WP_Query,然后使用$your_query->next("下一页")$your_query->prev("上一页")添加下一页和上一页链接(文本具有默认值,因此不需要参数)。

必须将参数直接作为数组传递给类初始化,而不是使用标准WP_Query的各种选项。

这有点hacky,但它可以工作!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接