自定义帖子类型存档页面:设置每页帖子,分页

时间:2011-06-27 作者:asymptote

我有一个自定义的帖子类型,叫做video. 要对其存档页分页,显示only 3 posts 在每一页上。

存档页面上还有一个自定义循环,用于输出all 视频帖子(用于缩略图库)。

这是archive-video.php:

<?php while( have_posts() ) : the_post(); ?>
    MAIN LOOP...
<?php endwhile; wp_reset_query(); ?>

<?php next_posts_link(); previous_posts_link(); >

<?php $custom_loop = new WP_Query( array(\'post_type\' => \'video\', \'posts_per_page\' => \'-1\' ) );
<?php while ( $custom_loop->have_posts() ) : $custom_loop->the_post(); ?>
    CUSTOM LOOP...
<?php endwhile; ?>
我试着设置posts_per_page 至3使用pre_get_posts (code here). 分页可以很好地工作,但自定义循环现在只输出3个帖子,而不是所有帖子!

有谁有硬编码/非插件解决方案?一直在谷歌上搜索都没有用。。。任何建议/帮助都将不胜感激!!!

3 个回复
SO网友:Bainternet

您发布的链接中的代码将(使用pre_get_posts) 如果您是从该类型查询帖子,将始终将每页的帖子数更改为3。因此,更好的解决方案是不使用该代码,只需在您的代码上方,然后:

<?php while( have_posts() ) : the_post(); ?>

添加:

if ( get_query_var(\'paged\') )
    $paged = get_query_var(\'paged\');
elseif ( get_query_var(\'page\') )
    $paged = get_query_var(\'page\');
else
    $paged = 1;
query_posts(array(\'post_type\' => \'video\', \'posts_per_page\' => \'3\', \'paged\' => $paged ));
这只会影响该查询,而不是该帖子类型的所有查询。

更新时间:

代码的结构应如下所示:

if ( get_query_var(\'paged\') )
    $paged = get_query_var(\'paged\');
elseif ( get_query_var(\'page\') )
    $paged = get_query_var(\'page\');
else
    $paged = 1;
query_posts(array(\'post_type\' => \'video\', \'posts_per_page\' => \'3\', \'paged\' => $paged ));
while( have_posts() ) : the_post(); 
    //MAIN LOOP...
endwhile; wp_reset_query(); 

next_posts_link(); previous_posts_link(); 

$custom_loop = new WP_Query( array(\'post_type\' => \'video\', \'posts_per_page\' => \'-1\' ) );
while ( $custom_loop->have_posts() ) : $custom_loop->the_post();
    //CUSTOM LOOP...
endwhile;
wp_reset_query(); 

SO网友:MartinJJ

尝试\'paged\' => $paged, 之后new WP_Query( array(\'post_type\' => \'video\', 和更改\'posts_per_page\' => \'-1\'\'posts_per_page\' => \'3\'

SO网友:Robert Bokori

我会使用pre_get_posts 钩住你的情况,我会过滤主查询。将以下代码添加到函数中。php

add_action( \'pre_get_posts\', function ( $query ) {
  if ( $query->is_post_type_archive( \'video\' ) && $query->is_main_query() && ! is_admin() ) {
    $query->set( \'posts_per_page\', 3 );
  }
} );
希望这有帮助!

结束

相关推荐

Metadata in loops

我有一个标准的Wordpress循环显示项目: $loop = new WP_Query( array( \'post_type\' => \'images\', \'orderby\' => \'menu_order\', ) ); while ( $loop->have_posts() ) : $loop->the_post();