为什么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('« Newer',$foo_query->max_num_pages); ?>
<?php next_posts_link('Older »',$foo_query->max_num_pages); ?>
</nav>
的endif;
后引用this answer后。经过一些进一步的研究后,我跑过一篇文章,提到page-foobar.php
和posttype-foobar.php
names 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('« Newer',$wp_query->max_num_pages); ?>
<?php next_posts_link('Older »',$wp_query->max_num_pages); ?>
</nav>
我没有测试这种加入这个<?php wp_reset_postdata(); ?>
之前和<?php endwhile; ?>
后:
<nav>
<?php previous_posts_link('« Newer',$wp_query->max_num_pages); ?>
<?php next_posts_link('Older »',$wp_query->max_num_pages); ?>
</nav>
测试过,我仍然被发送到404页面。当我将next_posts_link()
更改为<?php var_dump(next_posts_link('« Older Entries', $wp_query->max_num_pages)); ?>
时,它将返回NULL
。如果我将next_posts_link()
更改为get_next_posts_link()
,我会得到string(99)
。我的分页有什么问题?
而且引用:
- Wordpress pagination (next_posts_link) on custom wp_query not showing
- next_posts_link 404 error
- WP_Query and next_posts_link
我怎样才能正确地得到我的分页去到下一个页面?
在做了一些进一步的研究之后,我遇到了问题的解决方案,希望它能帮助别人。提交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('« Newer',$wp_query->max_num_pages); ?>
<?php next_posts_link('Older »',$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; ?>
在'wp_reset_postdata'之前加'nav'并尝试 – Karthik
我试过了,仍然出错。我将编辑我的问题 –
这些函数需要在循环内发生(即// code是)。 – rnevius