Intereting Posts
Как переименовать изображение при загрузке по определенному плагину или послепечатать в WordPress Логин снова после обновления профиля Как переопределить заголовок Message-ID функции wp_mail? Переопределение URL-адреса таксономии Как добавить текст поверх слайд-шоу? Как добавить пользовательские параметры в Настройки галереи? Как разрешить пользователям указывать интересы при регистрации и отображать ли они контент, отображаемый на главной странице? как сделать отдельное поле в wordpress user_data_ Как предотвратить выполнение запроса по умолчанию, сохраняя при этом возможность использовать WP_Query в шаблоне? gform_after_submission добавить список названий форм после содержимого сообщения Можно ли использовать wp_redirect () для новой вкладки? Значение wp_editor textarea не обновляется Кто-нибудь понял, как использовать WordPress MultiSite с помощью Domain Mapping & SSL? Показать все неиспользуемые плагины выдержка не появляется

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

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

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+ вызовов БД для достижения того, чего я хочу?

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

 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 );