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