カスタム投稿タイプには次のクエリを使用します。
<?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();
?>
Offsetパラメータが機能しない理由はありますか?まったく別のクエリをすべて書く必要があるでしょうか。
この動作の理由はとても簡単です。まず第一に、あなたはget_posts
が投稿を得るためにWP_Query
を使うことを知っていなければなりません。
それでは、WP_Queryの実装を見てみましょう。 query.phpの 1998行に があります。
if ( $q['posts_per_page'] == -1 ) {
$q['nopaging'] = true;
それから 2544行目の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
を大きな正数に設定することができます。
'numberposts'値を大きな正数に設定してください。 numberpostsを-1に設定すると、オフセット値を無視してすべてのFAQを返します。