为什么next_post_link()不适用于WP_Query?

问题描述:

一直在研究我使用WordPress的分页问题。我page-foobar.php文件是:为什么next_post_link()不适用于WP_Query?

<?php 
// the query 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'ignore_sticky_posts' => true,); 
$foo_query = new WP_Query($foobar_args); 
if ($foo_query->have_posts()) : ?> 
    <?php while ($foo_query->have_posts()) : $foo_query->the_post();?> 
     // code 
    <?php endwhile; ?> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?> 

我说:链接显示的网址为site/foobar/page/2/

,但显示404页:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$foo_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$foo_query->max_num_pages); ?> 
</nav> 

endif;后引用this answer后。经过一些进一步的研究后,我跑过一篇文章,提到page-foobar.phpposttype-foobar.phpnames can *以便重命名其中的一个。我将其更名为posttype-foobar2.php,更改了我的functions.php,并进行了测试,并且仍然使用正确的网址发送到404页面。另一篇文章提到,您必须使用wp_query()所以我改变了我的page-foobar.php到:

<?php 
// the query 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'ignore_sticky_posts' => true,); 
$wp_query = new WP_Query($foobar_args); 
if ($wp_query->have_posts()) : ?> 
    <?php while ($wp_query->have_posts()) : $wp_query->the_post();?> 
     // code 
    <?php endwhile; ?> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?> 

分页:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
</nav> 

我没有测试这种加入这个<?php wp_reset_postdata(); ?>之前和<?php endwhile; ?>后:

<nav> 
    <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
    <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
</nav> 

测试过,我仍然被发送到404页面。当我将next_posts_link()更改为<?php var_dump(next_posts_link('&laquo; Older Entries', $wp_query->max_num_pages)); ?>时,它将返回NULL。如果我将next_posts_link()更改为get_next_posts_link(),我会得到string(99)。我的分页有什么问题?

而且引用:

我怎样才能正确地得到我的分页去到下一个页面?

+0

在'wp_reset_postdata'之前加'nav'并尝试 – Karthik

+0

我试过了,仍然出错。我将编辑我的问题 –

+0

这些函数需要在循环内发生(即// code是)。 – rnevius

在做了一些进一步的研究之后,我遇到了问题的解决方案,希望它能帮助别人。提交Sindhu答案确实有关于功德加:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 

和修改的参数:

$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'paged' => $paged); 

的法典get_query_var()。做了这个额外的改变后,它仍然无法正常工作,所以我开始测试我的固定链接。当我在Default下运行代码时,分页工作。当我更改为Post name并保存两次时,它仍然无法工作。浏览后,我决定搜索custom post type giving 404 error,我碰到“Fixing Custom Post Type 404 Errors In WordPress”,其中提到我可能会创建一个双slu slu。经过审查,我实际上是这样做的,WordPress与双重slu cla冲突。我决定将我的posttype-foobar.php更改为posttype-foobar_t.php并更新了我的functions.php文件。而不是修改我的本地主机上的数据库来修复slug问题,我决定安装一个干净的安装与修改后的更改,它的工作原理。

我还想指出我的一些发现,对于大多数提到的帖子,您必须将查询称为$wp_query = new WP_Query($foobar_args);

// the query 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$foobar_args = array('post_type' => 'foobar', 'posts_per_page' => 4, 'paged' => $paged); 
$wp_query = new WP_Query($foobar_args); 
if ($wp_query->have_posts()) : ?> 
    <?php while ($wp_query->have_posts()) : $wp_query->the_post();?> 
      <?php the_title(); echo "<br/>"; ?> 
    <?php endwhile; ?> 
    <nav> 
     <?php previous_posts_link('&laquo; Newer',$wp_query->max_num_pages); ?> 
     <?php next_posts_link('Older &raquo;',$wp_query->max_num_pages); ?> 
    </nav> 
    <?php wp_reset_postdata(); ?>       
    <?php else : ?> 
     <p><?php _e('Sorry, no foobar posts at this time.', 'theme'); ?></p> 
<?php endif; ?>