Intereting Posts
Как отслеживать логины пользователей? Сообщения появляются под «опубликованными», но не «все», Сделать страницы вложений потребует базового URL-адреса Небезопасный SSL от dynamic.css на woocommerce включить исключение внутри темы для пустой области виджета Пользовательская функция перезаписи мод не отвечает Сообщение о статусе Front Post Сохраните выводимое изображение в медиабиблиотеку с другим именем и расширением Как получить данные из Advanced Custom post при поиске определенного ключевого слова или имени поля, связанного с этим сообщением? Могут ли плагины WordPress «Поговорить друг с другом»? WordPress установлен, но не отображается! Не удается выполнить или отменить подписку на блоги в браузере Opera Формат файла прикрепленного изображения Config файл приложения apple-app-site-association с wordpress Постоянная ссылка страницы привязки – $ post не сбрасывается?

Оптимизировать запрос персонализированного запроса WP

Я нахожусь в миссии по оптимизации большого сайта. На сайте довольно много сообщений

На странице архива отображается только выдержка, миниатюра и заголовок персонализированного типа сообщения. Изображение и заголовок обе ссылки на соответствующую страницу.

Каждая архивная страница содержит около 15 сообщений, но возвращает 92 запроса. Без каких-либо сообщений, загруженных, так что просто виджеты навигации и нижнего колонтитула есть около 40 запросов.

Я прочитал, что есть способ остановить WP от поиска базы данных для определенных вещей, так что буквально только то, что мне нужно.

Вот мой текущий пользовательский запрос типа сообщения:

<?php $args = array( 'post_type' => 'venues', 'orderby' => 'menu_order', 'order' => 'ASC', 'posts_per_page' => 15); $loop = new WP_Query( $args ); if( $loop->have_posts() ): while( $loop->have_posts() ): $loop->the_post(); global $post; ?> <li class="venue-item" itemscope="" itemtype="http://schema.org/Article"> <div class="featured-image"> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark"><?php the_post_thumbnail();?></a> </div> <div class="one-third"> <div class="venue-description"> <a href="<?php echo get_permalink();?>"><h3 itemprop="headline"><?php echo get_the_title(); ?> </h3></a> <p itemprop="description"><?php the_excerpt() ?></p> </div> </div> </li> <?php endwhile; endif; ?> 

Есть ли способ оптимизировать этот запрос, чтобы получить только то, что нужно от базы данных? Речь идет не о том, чтобы страница загружалась быстрее, так как она уже очень быстро и сидит за лаком, это касается создания масштаба сайта, поскольку они ожидают большой трафик трафика (с 1000 посещений в день до примерно 5000), на следующей неделе или два поэтому все, что я могу сделать, чтобы помочь моему серверу, хорошо для меня!

На сайте мало активных плагинов; ithemes security, yoast, очистка лака и ACF, так что это очень хорошо, так или иначе, просто пытаясь увидеть, могу ли я сделать больше! Заранее спасибо.

Solutions Collecting From Web of "Оптимизировать запрос персонализированного запроса WP"

Ваша большая проблема заключается в том, что вы выполняете собственный запрос вместо основного запроса, который никогда не должен делать. Я сделал довольно обширную запись по этой самой теме , вы обязательно прочитаете этот пост. Возвращаясь к циклу по умолчанию и используя pre_get_posts чтобы соответствующим образом изменить основной запрос, вы сэкономите огромное количество вызовов db. Помните, что даже если вы удалите основной цикл и замените его на обычную, основной запрос по-прежнему выполняется нормально. При замене основного запроса на пользовательский, это приводит только к выполнению дополнительных операций и вызовов db. Это похоже на то, чтобы делать то же самое в два раза и получать только один раз.

Вам также нужно помнить, что эскизы сообщений не кэшируются для пользовательских запросов, так что это само по себе приводит к 2 дополнительным вызовам на каждую запись. Вот почему вы видите огромное количество запросов из своего пользовательского запроса. Вы можете посмотреть этот пост о том, как оптимизировать этот

РЕДАКТИРОВАТЬ

Вы должны заменить свой код на своей странице архива, который находится в вашем вопросе, со следующим кодом. Вместо основного запроса у вас не должно быть специального запроса.

 <?php if( have_posts() ): while( have_posts() ): the_post(); ?> <li class="venue-item" itemscope="" itemtype="http://schema.org/Article"> <div class="featured-image"> <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" rel="bookmark"> <?php the_post_thumbnail();?> </a> </div> <div class="one-third"> <div class="venue-description"> <a href="<?php echo get_permalink();?>"><h3 itemprop="headline"> <?php echo get_the_title(); ?> </h3> </a> <p itemprop="description"> <?php the_excerpt() ?> </p> </div> </div> </li> <?php endwhile; endif; ?> 

Это должно увидеть падение запросов. Все, что вам нужно сделать, это изменить основной запрос в соответствии с вашими потребностями

 add_action( 'pre_get_posts', function ( $q ) { if ( !is_admin() && $q->is_main_query() && $q->is_post_type_archive( 'venues' ) ) { $q->set( 'order', 'ASC' ); $q->set( 'orderby', 'menu_order' ); $q->set( 'posts_per_page', 15 ); } });