Intereting Posts
Удаление сценариев WordPress WordPress не отправляет подтверждение по электронной почте новым зарегистрированным пользователям Отключить редактор содержимого для конкретных страниц Почему preg_replace_callback никогда не срабатывает в этой функции? Как я могу отлаживать подключение к базе данных для модульного тестирования? wp_nav_menu, похоже, не работает на пользовательских страницах типа сообщения Исключить сообщения без категории из цикла WP_mail () Проблема. Дублированные письма, если $ _GET == email Существует ли (относительно простой!) Способ создания отношений между таксономиями БЕЗ необходимости публикации в качестве посредника Почему приложение hp_head не будет принимать параметры? ACF – получать поля из группы Изменение структуры и области permalink Параметры темы – WordPress Миграция базы данных wordpress от mariadb 10.0.20 до 5.5.50 Запросить запрос по meta_value с несколькими настраиваемыми полями

WordPress «Loop» с большим набором результатов

Я не уверен в соответствующей терминологии, но у меня есть «цикл» wordpress для настраиваемого типа сообщений, который имеет примерно 300 результатов, которые все отображаются на одной странице (без поискового вызова). Причиной является огромная нагрузка на сервер БД, потому что для каждой «записи» в «цикле» есть как N запросов к базе данных (the_title, has_post_thumbnail, get_post_thumbnail_id, the_content, get_post_meta и т. Д.). Каков метод WordPress для оптимизации этого? Для чего-то вроде этого большинство разработчиков просто переходят к выполнению запросов с помощью $ wpdb или это способ WordPress для кеширования страницы и перехода? Я посмотрел на выполнение прямых $ wpdb sql-запросов, но захват соответствующих данных (особенно изображений, связанных с сообщением) менее интуитивно понятен.

Вы можете использовать API Transients для кэширования всего вывода HTML, чтобы запросы не выполнялись каждый раз при загрузке страницы:

$transient = 'my-300-posts'; $timeout = 3600; // 1 hour if ( false === $out = get_transient( $transient ) ) { $args = array( YOUR ARGS GO HERE ); $posts = get_posts( $args ); if ( $posts ) { foreach ( $posts as $post ) { $out .= get_the_title( $post->ID ); $out .= // whatever else you want to output... } } if ( $out ) { set_transient( $transient, $out, $timeout ); } } echo $out; 

Тем не менее, вы по-прежнему обслуживаете 300 эскизов сообщений на одной странице, что очень важно для передачи данных.

(Вам также необходимо удалить переходный процесс на save_post и delete_post )

Может быть, вам будет лучше с бесконечной прокруткой? Это вариант в плагине Jetpack .