У меня есть домашняя страница, отображающая home.php
шаблон, содержащая 2 боковые панели с виджетами в них.
Основной запрос по-прежнему использует 10 стандартных сообщений, но, поскольку я их не отображаю, я бы хотел полностью исключить запрос к базе данных. Если потребуется, пустой пост-цикл будет делать, поскольку я не использую основной цикл в моем home.php
шаблоне.
Как бы я это сделал? Я мог бы использовать, pre_get_posts
чтобы свести к минимуму и уменьшить запрос, но это все еще оставляет мне очень быстрый запрос, как мне полностью его исключить?
Ответы:
posts_request
фильтрПролистывая,
WP_Query
мы находим эту часть интереса:Мы можем попытаться устранить основной домашний запрос через
posts_request
фильтр. Вот пример:где мы форсируем
'fields' => 'ids'
ранний выход.posts_pre_query
Фильтр (РГ 4.6+)Мы также могли бы использовать новый фильтр
posts_pre_query
src, доступный в WordPress 4.6+Этот фильтр позволяет пропустить обычные запросы к базе данных, чтобы вместо этого внедрить пользовательское внедрение сообщений.
Я только что проверил это и заметил, что это не предотвратит липкие сообщения, в противоположность
posts_request
подходу.Проверьте билет # 36687 для получения дополнительной информации и примера там @boonebgorges.
источник
WP_Query
рано выйти , например, с помощью аргумента, подобного'skip_query' => true
или даже через фильтр, но потом я понимаю, как легко это может испортить сайты в Интернете, так много способов ;-) @TomJNowellsplit_the_query
Прямо под строками есть фильтр , делайте то же самое, но мне интересно, он не уменьшает количество запросов!'fields' => 'ids'
, и я часто его использую ;-)Вот замечательный трюк, который я узнал от @birgire, мы можем остановить основной запрос, добавив
AND where 0=1
кWHERE
предложению SQL-запроса. Это может все еще привести к одному запросу базы данных, но это наверняка остановит основной запрос от запроса постовВы также можете просто попробовать заменить
WHERE
предложение наwhere 0 = 1
вместо
К сожалению, у меня нет времени что-либо тестировать, но это должно стать хорошей отправной точкой
источник
$q->set( 'ignore_sticky_posts', true );
всякий случай.Для справки, до: 45q, после: 42q
Код очень похож на код, используемый @birgire
источник