web-dev-qa-db-fra.com

Quelle est la différence entre post_limits et pre_get_posts?

En raison du manque de documentation sur post_limits , il est difficile d’en savoir plus sur cette fonction et sur son utilisation. Jamais utilisé auparavant ou vu il utilisé alors peut-être que son pas être utilisé?

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 );

D'après mes tests, post_limits fait la même chose que d'utiliser pre_get_posts.

Si je voulais renvoyer 5 messages de manière conditionnelle sans paginer le reste, utiliserais-je post_limits ou pre_get_posts?

6
Brad Dalton

Notez que vous remplacez ici la pagination de la requête principale, avec le filtre posts_limits, en utilisant des valeurs codées en dur:

'LIMIT 0, 25'

0 est le décalage et 25 le nombre de publications à afficher.

Donc, dans ce cas, je voudrais simplement utiliser pre_get_posts avec

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

et nous n'avons pas à nous soucier de la pagination.

Si je voulais renvoyer 5 messages de manière conditionnelle sans paginer le reste, utiliserais-je post_limits ou pre_get_posts?

Si nous décidons par la suite que la pagination est nécessaire, nous devons retravailler votre code posts_limits. Le filtre pre_get_posts fonctionnerait tel quel et nous pourrions donc dire que c'est au moins une méthode plus "évolutive".

Autre chose: si vous utilisiez get_posts() ou WP_Query() avec les filtres suppressed , le filtre posts_limits ne serait pas disponible tant que le hook pre_get_posts serait accessible.

5
birgire

pre_get_posts vous permet de modifier les arguments de la requête très tôt dans une requête. Vous pouvez modifier tout ce qui constituerait un argument WP_Query valide, y compris LIMIT via l’argument posts_per_page. Cela permet une gamme d'effets beaucoup plus large que posts_limits qui ne vous permet de modifier qu'une partie de la requête SQL de la base de données.

Dans votre cas, utilisez pre_get_posts car le code de base gère la pagination pour vous (du moins s'il s'agit de la requête principale (). Si vous utilisez post_limits, vous devrez suivre et gérer la pagination - la partie "0,25" vous-même. , augmentant les valeurs à mesure que vous parcourez la page.

4
s_ha_dum