Intereting Posts
Как woo-commerce хранит значение данных продукта в БД? Пользовательский плагин не смог установить и активировать Функция поиска в 'taxonomy postbox' на странице редактирования сообщений Как вы можете определить, является ли изображение просто прикрепленным или фактически вставлено в сообщение? Как добавить поисковые вары с разбитыми на страницы URL? Wp_query … тип термина – другой div get_categories список для детей с детьми Добавление контента в таксономический обмен Получить значение кнопки отправки в пользовательском типе сообщения Как создать архив для всех сообщений, у которых нет почтового формата? Как получить пользовательский размер изображения для изображения, загруженного в Настройщик Как вручную разместить код виджета Запретить создание тегов на странице публикации посты по дате, такие как craigslist Есть ли способ использовать форматирование LaTeX для WordPress?

Оптимизация нескольких WP_querys в один вызов?

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

К сожалению, в данный момент я попытался:

function get_gametitle_info() { global $post; $game_terms = get_the_terms($post, 'games_titles'); $game_con = wp_list_pluck( $game_terms, 'slug' ); $game_info = array( 'post_type'=> 'game_information', 'posts_per_page' => 1, 'post_status' => 'publish', 'order' => 'ASC', 'tax_query' => array( array( 'taxonomy' => 'games_titles', 'field' => 'slug', 'terms' => $game_con, ), ) ); $game_info_query = new WP_Query( $game_info ); while ( $game_info_query->have_posts() ) : $game_info_query->the_post(); $gametitleID = get_the_ID(); if (has_term('3pegi', 'age_ratings', $post)){ $age_terms = array('3pegi'); } if (has_term('7pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi'); } if (has_term('12pegi', 'age_ratings', $post)){ $age_terms = array(array('3pegi', '7pegi', '12pegi')); } if (has_term('16pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi'); } if (has_term('18pegi', 'age_ratings', $post)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi', '18pegi'); } endwhile; return $gametitleID; return $age_terms; return $game_info_query; } 

Это дает мне a – Предупреждение: неверный аргумент, предоставленный foreach () в D: \ xampp \ htdocs \ wp-includes \ functions.php в строке 2721

Массив game_info нужно запускать только один раз, тогда я бы хотел, чтобы он мог использовать эти данные вместо того, чтобы выполнять новый запуск каждый раз во всех других совпадающих запросах, когда я возвращаю тип post после использования wp_reset_postdata ();

Извините, если не ясно. Еще один способ объяснить:

[сообщение [post post post post] [сообщение] [сообщение] [сообщение]

Постоянное переключение кажется для меня бессмысленным, когда на самом деле мне нужно только сделать wp_query один раз для A и B. Будет ли это экономить на ресурсах и уменьшить нагрузку на 3 секунды? благодаря

Нормальная структура внутри почтового файла:

 $currentID = get_the_ID(); $game_terms = get_the_terms($post->ID, 'games_titles'); $game_con = wp_list_pluck( $game_terms, 'slug' ); $args = array( 'post_type'=> 'game_information', 'posts_per_page' => 1, 'post_status' => 'publish', 'order' => 'ASC', 'tax_query' => array( array( 'taxonomy' => 'games_titles', 'field' => 'slug', 'terms' => $game_con, ), )/*Search above post type for taxonomy and if matches then proceed*/ ); $the_query = new WP_Query( $args ); if($the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); $gametitleID = get_the_ID(); if (has_term('3pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi'); } if (has_term('7pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi'); } if (has_term('12pegi', 'age_ratings', $post->ID)){ $age_terms = array(array('3pegi', '7pegi', '12pegi')); } if (has_term('16pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi'); } if (has_term('18pegi', 'age_ratings', $post->ID)){ $age_terms = array('3pegi', '7pegi', '12pegi', '16pegi', '18pegi'); } endwhile; else: endif; wp_reset_postdata(); 

Для дальнейшего ясности я ищу способ вызвать wp_query один раз при загрузке страницы (специфичный для этой страницы) и сохранить данные как переменную, которая будет использоваться в заголовке, главной, боковой панели и нижнем колонтитуле. Но НУЖДЫ должны быть обновлены для каждой уникальной загрузки страницы, поскольку данные очень динамичны и должны быть самыми последними. В настоящий момент я вызываю несколько wp_query, а затем каждый раз сбрасываю postdata (даже если wp_query вызывает одни и те же данные) из-за того, что мне нужно переключаться между типами сообщений.

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

Ваше описание проблемы не очень понятно, и ваше несогласованное форматирование кода делает это трудным для чтения (плюс я уверен, что какой-то код отсутствует), но если проблема запускает запрос несколько раз, вы можете решить это со статической переменной ,

 function get_gametitle_info() { static $game_info_query = false; if (false !== $game_info_query) { return $game_info_query; } /* the rest of your code */ } 

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

 function get_gametitle_info() { $game_info_query = get_transient( 'game_info_query' ); if ( !empty( $game_info_query ) ){ return $game_info_query; } /* (most of) the rest of your code */ set_transient('game_info_query', $game_info_query, HOUR_IN_SECONDS ); return $game_info_query; } 

Это должно сохранить данные в базе данных за час до его обновления. Очевидно, вы можете выбрать другой временной интервал. Один простой запрос должен быть быстрее, чем сложный запрос.

Вы могли бы даже объединить два подхода, хотя я не тестировал, и я не уверен в эффективности этого.

 function get_gametitle_info() { static $game_info_query = false; if (false !== $game_info_query) { return $game_info_query; } $game_info_query = get_transient( 'game_info_query' ); if ( !empty( $game_info_query ) ){ return $game_info_query; } /* (most of) the rest of your code */ $game_info_query = 'howdy'; set_transient('game_info_query', $game_info_query, HOUR_IN_SECONDS ); return $game_info_query; }