Intereting Posts
Пользовательский тип почтового сообщения становится неправильным при добавлении настраиваемого мета-поля Значение выводится вне эха Удаление запятой с «даты входа» в теме «Двадцать шесть» Как защитить пароль страницы сообщений в WordPress? jQuery UI Autocomplete для поля поиска в WordPress Печатать титульную страницу в заголовке определенной страницы $ post response fail Могу ли я установить post_type query_var при нажатии ссылки? Как изменить название следующего виджета? Использование WP Stats без Jetpack Пользовательская папка для шаблонов страниц WordPress категории сообщений – как показывать только категории с определенным идентификатором родителя Почему мой пароль не защищен от перенаправления страниц для некоторых пользователей Как сделать элементы темы настраиваемыми в wordpress? Выберите событие, в котором дата начала меньше текущей даты, а дата окончания больше текущей даты

wp_admin edit.php медленно с большим количеством запросов

У меня около 4000 сообщений. В настоящее время, когда я нажимаю «Все сообщения» (edit.php), загрузка занимает около 10 секунд, и я показываю около 1000 запросов!

Большинство из них выглядят как …

SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (37336) ORDER BY t.name ASC 

Если я отключу WordPress SEO, я могу сократить количество запросов пополам, но для загрузки все еще занимает около 7 секунд.

Просто для удовольствия я отключил все мои плагины и не добился значительного улучшения производительности. Я настраивал MySQL и PHP примерно так, как я могу себе представить. Проблема заключается в непомерном количестве запросов.

Любой способ настроить WordPress здесь, чтобы использовать меньше? Я пробовал удалять ревизии и т. Д. Нада. На самом деле здесь можно было бы понять.

Благодаря!

Solutions Collecting From Web of "wp_admin edit.php медленно с большим количеством запросов"

Один из способов сделать это (да, это уродливо и хакерски) – создать пользовательскую страницу с настраиваемым шаблоном страницы, который вычеркивает все ваши сообщения и создает правильные URL-адреса ссылок для каждого из них.

Например:

 <?php /* Template Name: View Posts Quickly */ if ( !is_user_logged_in() ) { # Redirect the user or use wp_die('Permission denied') or throw a 404 } else if ( !current_user_can('activate_plugins') ) { # Permission denied } else { $query_args = array( 'post_type' => 'post', 'posts_per_page' => '-1', 'post_status' => array( 'any' ), 'orderby' => 'title', 'order' => 'asc' ); $post_list = new WP_Query( $query_args ); if ( ! $post_list->have_posts() ) { # Tell user no posts found } else { echo '<h2>The Post List:</h2><ul>'; while ( $post_list->have_posts() ) { $current = $post_list->next_post(); # Modify the below to include any extra data wanted for each item echo get_post_edit_link( $current->post_title, '<li>', '</li>', $current->ID); } echo '</ul>'; } } ?> 

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

Используя вышеизложенное (и, конечно же, создав закрытую страницу и установив шаблон для использования вышеуказанного шаблона), вы получите один более чистый и быстрый список.

Но нормальное отображение сообщений WordPress отображает много дополнительных данных, используя множество дополнительных запросов из-за дизайна базы данных. Конструкция db обеспечивает хорошую гибкость, но один компромисс – это возможность рисовать много связанной информации только в одном или двух запросах.

Лучше всего было бы убить эти дополнительные запросы, разделив термины столбцов, отображаемых в списке сообщений (но вы потеряете различные инструменты сортировки, ограничения и т. Д., Которые предоставляет список wordpress, хотя вы можете создавать собственные фильтры, сортировать , и т. д. по manage_*_posts_columns фильтра manage_*_posts_columns .

Другой, лучший способ сделать это – сделать пару разных вещей:

  1. Найдите фильтры, которые выполняют эти запросы в WordPress SEO, и удалите их
  2. Посмотрите на данные, которые они собирают для отображения в списке сообщений, и используйте фильтры posts_join и posts_fields, чтобы добавить данные, которые они собирают через свои индивидуальные запросы, в запрос, который запускается для создания списка сообщений.

Например, запрос, который вы показали:

 SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (37336) ORDER BY t.name ASC 

Этот запрос собирает запись term_taxonomy и term_relationships для какой-либо цели (скорее всего, чтобы показать, какие сообщения были сделаны для них типа seo.

Если вы точно определите, что искали, вы могли бы придумать соответствующие сегменты запросов, чтобы изменить, чтобы вытащить только то, что необходимо для каждого сообщения.

Если вы можете сделать это, просто добавьте еще несколько полей для каждого сообщения в список результатов, не делая почтовый список возвращать несколько записей для каждого сообщения, тогда вы также можете удалить свой фильтр отображения и просто вытащить поля из текущего после.

Это в основном устранит все дополнительные запросы, вставленные WP SEO, и позволит вам получить данные, которые они отображают практически без дополнительной работы (просто выберите два дополнительных поля из базы данных).

Если они используют сериализованный массив для каждого сообщения, вам, вероятно, потребуется сделать что-то вроде:

posts_join

добавьте что-то вроде LEFT JOIN (post_meta) ON (post_meta.post_id = post.ID)

posts_fields

добавить что-то вроде (post_meta.meta_value) AS seo_meta

Затем удалите свой фильтр по столбцам и добавьте свой собственный, который просто не проверяет значение seo_meta и извлекает соответствующие данные.

Если они не используют сериализованный массив, то вы просто сделаете несколько дополнительных левых объединений (которые будут устанавливать seo_meta равным null, если они не существуют) и несколько дополнительных полей.

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

Заметки:

  • Если вы выполняете вышеуказанное, убедитесь, что используете is_admin () и соответствующие другие проверки, чтобы изменить запрос только на стороне администратора при захвате списков элементов для соответствующих экранов.