Intereting Posts
Вставка данных из настраиваемой PHP-страницы в таблицу wp_postmeta WPMU Если на сайте MU нет администратора, отключите сайт Преобразование всех дат в поле в Unix-время, за исключением тех, которые уже в Unix-времени Текущее сообщение Родительская категория и ссылки на детские категории Будет ли активировать другую тему, сохранить пользовательские настройки для текущей темы? Почему следующие страницы загружают один и тот же контент, а не старые статьи? Как применить фильтр в галерее внутри the_content ()? 2 цикла, только отображение 1 цикла в обоих циклах Несколько мета-полей в одном мета-поле? Страницы таксономии, остановить их индексирование или сгенерировать? Расширенные пользовательские поля не отображаются Связанная страница с пользователем переадресация https (с .htaccess) переадресацией как я показываю ручные данные в сообщении Разметка шаблона страницы для пользовательских типов сообщений

Как уменьшить количество запросов на запросы к базе данных для этой домашней страницы?

Я работаю над созданием блога с иерархией категорий ниже (только образец).

PARENT | |------------------------------------------------| Food Fashion | | |---------------------| |---------------------| European Asian European Asian | | | | |---------| |-----------| |--------| |--------| Italian French Chinese Japanese Italian French Chinese Japanese 

На главной странице мой клиент хочет отобразить три последних сообщения всех детей уровня 4, следовательно:

  • Последние три должности родителя> Еда> Европейская> Итальянская
  • Последние три должности родителя> Питание> Европейский> Французский
  • Последние три должности родителя> Питание> Азиатские> Китайские и т. Д.
  • и т.п.

Моя первая попытка была такой:

 $allPosts = new WP_Query('cat=20, 21, 24, 22, 23, 25, 75, 84, 79, 85, 83, 96, 95, 97, 65, 68, 107, 48, 49&showposts=100&order=ASC'); 

Согласно плагину отладки, на странице было вызвано 18 запросов, но я понял, что такой вызов не имеет смысла для того, что я хочу, потому что, если у категории есть 2000 сообщений, 100 сообщений, которые эта строка будет извлекать, будут из одной категории.

Поэтому я разделил вызовы следующим образом:

 $italianFood = new WP_Query('cat=20&showposts=3&order=DESC'); $italianFashion = new WP_Query('cat=21&showposts=3&order=DESC'); $frenchFood = new WP_Query('cat=24&showposts=3&order=DESC'); $frenchFashion = new WP_Query('cat=22&showposts=3&order=DESC'); 

Это работает, но после вызова ВСЕХ категорий количество запросов в базе данных увеличилось до 260!

Я буду кэшировать страницу с помощью плагина, но действительно ли мне нужно запустить 260+ вызовов БД для достижения того, чего я хочу?

Solutions Collecting From Web of "Как уменьшить количество запросов на запросы к базе данных для этой домашней страницы?"

Вы могли бы просто написать свой собственный запрос. Таким образом, это один запрос для каждой категории:

 global $wpdb; $query = ' SELECT wpp1.* FROM ' . $wpdb->posts . ' AS wpp1 LEFT JOIN ' . $wpdb->term_relationships . ' AS wptr1 ON wptr1.object_id = wpp1.ID WHERE post_type = %s AND post_status = %s AND wptr1.term_taxonomy_id = %d ORDER BY wpp1.post_date DESC LIMIT %d '; $query = $wpdb->prepare( $query, // Args: post type, post status, term taxonomy ID, number of posts 'post', 'publish', 80, 3 ); $posts = $wpdb->get_results( $query, ARRAY_A );