在自定义发布类型查询中使用偏移量

时间:2012-11-30 作者:user1860393

我对自定义帖子类型使用以下查询:

<?php
             $posts = get_posts(array(
                \'numberposts\' => -1,
                \'offset\' => 20,
                \'post_type\' => \'faqs\'

             ));


            if($posts)
            {

                foreach($posts as $post)
                {
                    echo \'<li class="faq">
                        <p class="title"><a href="\' . get_permalink($post->ID) . \'">\' . get_the_title($post->ID) . \'</a></p></li>\';
                        /*<h4 class="title"><a href="\' . get_permalink($post->ID) . \'">\' . get_the_title($post->ID) . \'</a></h4><p>\' . get_the_excerpt($post->ID) . \'</p></li>\'; */
                }

            }
             wp_reset_query();
            ?>
偏移参数不起作用有什么原因吗?也许我需要编写一个完全不同的查询?

2 个回复
SO网友:Krzysiek Dróżdż

这种行为的原因很简单。首先你必须知道get_posts 使用WP_Query 获取帖子。

那么,让我们看看WP\\u查询实现。在…上line 1998 of query.php 您可以找到:

if ( $q[\'posts_per_page\'] == -1 ) {
    $q[\'nopaging\'] = true;
然后开始line 2544 of query.php 您会发现:

if ( empty($q[\'nopaging\']) && !$this->is_singular ) {
    $page = absint($q[\'paged\']);
    if ( !$page )
        $page = 1;

    if ( empty($q[\'offset\']) ) {
        $pgstrt = ($page - 1) * $q[\'posts_per_page\'] . \', \';
    } else { // we\'re ignoring $page and using \'offset\'
        $q[\'offset\'] = absint($q[\'offset\']);
        $pgstrt = $q[\'offset\'] . \', \';
    }
    $limits = \'LIMIT \' . $pgstrt . $q[\'posts_per_page\'];
}
这是唯一增加帖子限制的部分。而且,正如您所看到的,只有当nopaging 未设置。所以如果posts_per_page 设置为-1,则不会添加SQL查询的分页部分。

那么你能做些什么来解决这个问题呢?您可以设置numberofposts 到某个大的正数。

SO网友:livearoha

将“numberposts”值设置为较大的正数。当numberposts设置为-1时,它将返回所有FAQ,忽略偏移值。

结束

相关推荐