我目前正在使用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
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)。
从我看到的核心代码来看,这似乎是您所能做的最好的了。希望有帮助!