在使用GET_POSTS()时,我可以同时使用number post=-1和Offset吗?

时间:2011-10-04 作者:Jason

我目前正在使用get\\u posts()作为我正在处理的主题的一小部分。然而,我遇到了一个小问题。

If I want to show all posts for a category, I set the \'numberposts\' argument to \'-1\'. However the issue is that when I do this, the offset no longer works.

我确实看到我告诉函数返回所有帖子,但我希望它不会返回所有帖子。因此,我确实看到了逻辑上的两难处境。

那么,使用get\\u posts,是否有一种方法可以显示除posts offset之外的所有posts?我知道有一些黑客的方法可以做到这一点,但我只是想知道我是否在这里做了一些明显的错误的事情?如果可能的话,我希望在get\\u posts函数的约束范围内工作。

我确实开始编一些黑客的东西。这是可行的,但我想知道是否还有其他方法可以做到这一点。

// Get posts
$posts = get_posts( $args );

// Adjust offset if neccesary
if( $args[\'numberposts\'] == -1 && $args[\'offset\'] > 0 ) {
    $i = 0;
    while ( $i < $args[\'offset\'] ) {
        unset( $posts[$i] );
        $i++;
    }
}

// ... now do my foreach() and setup_postdata
Visual representation

1 个回复
SO网友:Chris - SevenSpark

我认为问题在于,底层MySQL查询需要一个LIMIT子句来与OFFSET子句配合使用。(我试图验证MySQL的这一点,发现了这个https://stackoverflow.com/questions/255517/mysql-offset-infinite-rows ). 由于MySQL不能接受这些参数(offset没有限制),WordPress似乎放弃了offset参数。

这仍然有点老套,但我认为您唯一的其他选择是为“numberposts”参数设置一个任意高的数字。我认为可以肯定地说,你不会想要超过,比如说,500个帖子被回复。因此,您可以使用:

$posts = get_posts(array(
    \'offset\'    =>  2,
    \'numberposts\'   =>  500,
));
numberposts只是一个限制,所以它不应该引起任何问题。如有必要,您可以调高(MySQL似乎建议最大值为18446744073709551615)。

从我看到的核心代码来看,这似乎是您所能做的最好的了。希望有帮助!

结束

相关推荐