I’m using the following query for a custom post type:
<?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();
?>
Is there a reason as to why the offset parameter doesn’t work? Perhaps I need to write an entirely different query altogether?
Reason of this behavior is pretty simple. First of all you have to know that
get_posts
usesWP_Query
to get posts.So let’s look at WP_Query implementation. On line 1998 of query.php you can find:
Then on line 2544 of query.php you find:
It’s the only part where LIMIT for posts is added. And, as you can see, it is added only if
nopaging
is not set. So ifposts_per_page
is set to -1, then paging part of SQL query is not added.So what can you do to work it around? You can set
numberofposts
to some big positive number.Set ‘numberposts’ value to a large positive number. With numberposts set to -1 it will return all the faqs ignoring the offset value.