В чем разница между 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 11 J0000006Europe/Moscow 2015, 10:55:24

2 ответа


5

Обратите внимание, что здесь вы переопределяете поисковый запрос основного запроса с помощью фильтра 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 работал бы как есть, и поэтому мы могли бы сказать, что это, по крайней мере, более «будущий проверенный» метод.

Другое: если вы использовали get_posts() или WP_Query() с фильтрами suppressed , тогда фильтр posts_limits не будет доступен, а pre_get_posts.

ответил birgire 11 J0000006Europe/Moscow 2015, 11:35:44
4

pre_get_posts позволяет вам очень быстро изменить аргументы запроса в запросе. Вы можете изменить все, что было бы допустимым аргументом WP_Query, включая LIMIT с помощью аргумента posts_per_page. Это позволяет использовать гораздо более широкий диапазон эффектов, чем posts_limits, который позволяет изменять только одну часть SQL запроса базы данных.

В вашем случае используйте pre_get_posts, поскольку основной код будет управлять разбиением на страницы для вас (по крайней мере, если это основной запрос () Если вы используете post_limits, вам нужно будет отслеживать и управлять страницей - «0,25» часть самостоятельно, увеличивая значения, как вы стр.

ответил s_ha_dum 11 J0000006Europe/Moscow 2015, 23:06:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132