web-dev-qa-db-ja.com

Post_limitsとpre_get_postsの違いは何ですか?

post_limits に関するドキュメンテーションの欠如のため、この関数とそれをいつ使うべきかについてもっと学ぶのは難しいです。以前に使用したことがない、または使用されたことがないため、使用しないことをお勧めします。

function wpcodex_filter_home_post_limits( $limit, $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
        return 'LIMIT 0, 25';
    }

    return $limit;
}
add_filter( 'post_limits', 'wpcodex_filter_home_post_limits', 10, 2 );

私のテストに基づいて、post_limitsはpre_get_postsを使うのと同じことをします

残りをページ付けしないで条件付きで5つの投稿を返したい場合は、post_limitsまたはpre_get_postsを使用しますか

6
Brad Dalton

ここでは、ハードコードされた値を使用して、メインクエリのページングをposts_limitsフィルタでオーバーライドしています。

'LIMIT 0, 25'

0はオフセット、25は表示する投稿数です。

そのため、この場合はpre_get_postsを次のように使用します。

$query->set( 'posts_per_page', 25 );

ページングについて心配する必要はありません。

残りをページ付けしないで条件付きで5つの投稿を返したい場合は、post_limitsまたはpre_get_postsを使用しますか

後で改ページが必要であると判断した場合は、posts_limitsコードを修正する必要があります。 pre_get_postsフィルタは現状のままで動作するでしょう、そしてそれ故に我々はそれが少なくとももっと「将来的に保証された」方法であると言うことができます。

もう1つのこと:get_posts()またはWP_Query() suppress filtersと共に使用していた場合、posts_limitsフックはアクセス可能であるのにpre_get_postsフィルターは使用できません。

5
birgire

pre_get_postsを使用すると、リクエストの非常に早い段階でクエリ引数を変更できます。 WP_Query引数を介してLIMITなど、有効なposts_per_page引数となるものを変更できます。これにより、データベースクエリSQLの一部のみを変更できるposts_limitsよりもはるかに広い範囲の効果が可能になります。

あなたの場合、pre_get_postsを使用します。コアコードがページネーションを管理するためです(少なくともこれがメインのquery()である場合。post_limitsを使用する場合は、ページネーションを追跡および管理する必要があります- 「0,25」は自分で分割し、ページングするたびに値を増やします。

4
s_ha_dum