为什么next_post_link()不能使用WP_Query?

时间:2015-09-18 03:40:31

标签: php wordpress pagination

正在研究我使用WordPress的分页问题。我的page-foobar.php文件是:

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

我补充说:

<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

该链接在网址中显示为site/foobar/page/2/,但会显示404页面。在进行了一些进一步的研究之后,我遇到了一篇提到page-foobar.phpposttype-foobar.php names can clash的文章,所以要重命名其中一个。我重命名为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)。我的分页错误是什么?

进一步参考:

如何正确地将我的分页转到下一页?

2 个答案:

答案 0 :(得分:1)

package main

func main() {
    buffer := Buffer{}
    buffer.AddRecord("myKey", 12345)
}

type Buffer struct {
    records    map[string][]interface{}
}

// ProcessRecord adds a message to the buffer.
func (buffer *Buffer) AddRecord(key string, record interface{}) {
    _, ok := buffer.records[key]
    if !ok {
        buffer.records[key] = make([]interface{}, 0)
    }

    buffer.records[key] = append(buffer.records[key], record)
}

答案 1 :(得分:0)

在做了一些进一步的研究后,我遇到了我的问题的解决方案,我希望它可以帮助别人。 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,然后我跑过&#34; Fixing Custom Post Type 404 Errors In WordPress&#34;提到我可以创造一个双重slu ..经过审查,我实际上是这样做的,WordPress正在与双重冲突发生冲突。我决定将posttype-foobar.php更改为posttype-foobar_t.php并更新我的functions.php文件。我没有修改我的localhost上的数据库来修复slug问题,而是决定安装一个带有修改后的更改的干净安装,它可以工作。

我还想指出一些关于大多数帖子的调查结果,提到你必须将查询称为$wp_query = new WP_Query( $foobar_args );