Intereting Posts
WordPress отображает ссылку на изображение в коротком коде Пользовательская страница Тип страницы не работает на странице архива Установка Jplayer в WordPress Как добавить пользовательскую таксономию в качестве опции для меню в разделе «Внешний вид»> «Меню», Использование одного slug / post-name для нескольких страниц Как добавить пользовательский текстовый редактор в раздел добавления сообщений? Виджетная логика с использованием категории продуктов woocommerce MySQL: Как изменить URL-адрес в сообщениях с xxx.com на yyy.org? как разрешить загрузку после подписки на рассылку новостей? Проблемы с настраиваемым типом сообщения Есть ли строка запроса для edit.php для отображения всех сообщений, у которых нет пользовательских терминов таксономии? query_vars Фильтр: вы когда-либо использовали бы его, когда $ _GET доступен, и вам не нужен URL-адрес «Pretty»? Контрольный срок для каждой должности Включить как стандартный, так и пользовательский тип публикации в запросе, измененном внутри pre_get_posts Отображение иерархических подтерм пользовательской таксономии на основе глубины

Оптимизировать запрос персонализированного запроса 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 ); } });