Повторяющиеся Запросы


При использовании плагина query monitor я заметил, что делаю запрос к базе данных 4 раза. Я использую OPP. Итак, у меня есть метод, который выдает мне список сообщений, запрашивая базу данных. Я должен сделать это 4 раза, чтобы позволить пользователю выбрать сообщение. Мне любопытно, есть ли какой-нибудь метод, с помощью которого я могу хранить его и использовать там, где это когда-либо было необходимо? Так что сделайте это одним запросом. (На самом деле я запрашиваю список всех полей ACF)

Author: Latheesh V M Villa, 2019-11-01

1 answers

Вообще говоря, вы могли бы использовать API переходных процессов WP для сохранения запроса .

// Get any existing copy of our transient data
if ( false === ( $special_query_results = get_transient( 'special_query_results' ) ) ) {
    // It wasn't there, so regenerate the data and save the transient
     $special_query_results = new WP_Query( 'cat=5&order=random&tag=tech&post_meta_key=thumbnail' );
     set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
}

// Use the data like you would have normally...

Эта статья поднимает хороший вопрос, утверждая, что не стоит хранить объект WP_Query() как переходный, и вместо этого предлагает хранить идентификаторы сообщений, возвращенные из дорогостоящего запроса, во временном, а затем использовать эти идентификаторы для создания нового WP_Query. Конечно, при таком подходе мы бы сразу вернулись к дублированию запросов, но они были бы легче запросы.

$cache_key = 'my-expensive-query';
if ( ! $ids = get_transient( $cache_key ) ) {
    $query = new WP_Query( array(
        'fields' => 'ids',
        // ...
    ) );

    $ids = $query->posts;
    set_transient( $cache_key, $ids, 24 * HOUR_IN_SECONDS );
}

$query = new WP_Query( array(
    'post__in' => $ids,
) );

// while ( $query->have_posts() ) ...
 1
Author: Dave Romsey, 2019-11-01 17:06:19