Кэш Get_posts

У меня есть запрос (см. Ниже), который дает список из 10 новостей, упорядоченных по мета-значению «event_date», и отфильтровывается так, чтобы отображались только сообщения раньше, чем сегодня. Этот запрос занимает две секунды для обработки, поэтому я ищу простой способ кэширования результатов, чтобы быстрее получить время загрузки. Я уже использую WPEngine, поэтому мне не нужны никакие кеширующие плагины. Заранее спасибо за вашу помощь.

<?php $today = time();?> <?php $args = array( 'numberposts' => 10, 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_key' => 'event_date', 'meta_query' => array( array( 'key' => 'event_date', 'value' => $today, 'compare' => '<=', 'type' => 'NUMERIC' ) ) ); $postslist = get_posts( $args ); foreach ($postslist as $post) : setup_postdata($post); ?> 

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

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

 <?php // Check for transient. If none, then execute Query if ( false === ( $postslist = get_transient( 'postslist_query' ) ) ) { $args = array( 'numberposts' => 10, 'orderby' => 'meta_value_num', 'order' => 'DESC', 'meta_key' => 'event_date', 'meta_query' => array( array( 'key' => 'event_date', 'value' => $today, 'compare' => '<=', 'type' => 'NUMERIC' ) ) ); $postslist = get_posts( $args ); // Put the results in a transient. Expire after 12 hours. set_transient( 'postslist_query', $postslist, 12 * 60 * 60 ); } foreach ( $postslist as $post ) : setup_postdata( $post ); ?> 

подробнее о Transient API