WordPress виснет при большом количестве страниц
-
Здравствуйте уважаемые друзья.
Требуется совет гуру.
На сайте около 4500 записей (пользовательский тип). С момента примерно в 2000 записей появились жуткие тормоза админки, причем именно на страницах архива или добавления этого типа записи.
Были мысли, что нагрузку дает wp-cron.php, это подтверждалось логами, на которых wp_cron вылетал с ошибкой 500. Но его отключение в конфигеdefine('DISABLE_WP_CRON', true); define('ALTERNATE_WP_CRON', false);
результата не принесло.
Цифры : Память более 100 мб, время генерации страницы от 10 до 60 сек.
Какие есть мысли?
Спасибо
-
а что у вас крон делает то?
вы с этим разберитесь.а что у вас крон делает то?
вы с этим разберитесь.Дак у меня ничего особенного он не делает, я бы и хотел как раз уточнить, что именно входит в его обязанности, из-за чего он может вешать систему.
вы в самом первом сообщении сказали, что отключение крона ни к чему не приводит. но потом почему-то решили, что отключенный крон и есть проблема.
вы в самом первом сообщении сказали, что отключение крона ни к чему не приводит. но потом почему-то решили, что отключенный крон и есть проблема.
Я не решил, я предположил. Конечно, отключенный крон должен был решить проблему, если это он. Просто я не знаю куда уже думать.
остается только узнать, каким кодом у вас добавляется\выводится произвольный тип записей. а то инструкций по этому поводу слишком уж много, в некоторых даже прямые sql-запросы для этого используются.
остается только узнать, каким кодом у вас добавляется\выводится произвольный тип записей.
Не проблема.
add_action('init', 'create_taxonomy'); function create_taxonomy(){ // категории товаров $labels = array( 'name' => 'Категория', 'singular_name' => 'Категории товаров', 'search_items' => 'Поиск категорий', 'all_items' => 'Все категории', 'parent_item' => 'Родительская категория', 'parent_item_colon' => 'Родительскаякатегория:', 'edit_item' => 'Редактировать категорию', 'update_item' => 'Обновить категорию', 'add_new_item' => 'Добавить новую категорию', 'new_item_name' => 'New Type Name', 'menu_name' => 'Категории товаров', ); // параметры $args = array( 'label' => '', // определяется параметром $labels->name 'labels' => $labels, 'hierarchical' => true, 'rewrite' => true, 'query_var' => true, 'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5) ); register_taxonomy('item_class', 'item', $args ); // производители товаров $labels = array( 'name' => 'Производитель', 'singular_name' => 'Производители товаров', 'search_items' => 'Поиск производителей', 'all_items' => 'Все производители', 'parent_item' => 'Родительский производитель', 'parent_item_colon' => 'Родительский производитель:', 'edit_item' => 'Редактировать производителя', 'update_item' => 'Обновить производителя', 'add_new_item' => 'Добавить нового производителя', 'new_item_name' => 'New Type Name', 'menu_name' => 'Производители', ); // параметры $args = array( 'label' => '', // определяется параметром $labels->name 'labels' => $labels, 'hierarchical' => true, 'rewrite' => true, 'query_var' => true, 'show_admin_column' => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5) ); register_taxonomy('item_company', 'item', $args ); } add_action('init', 'my_custom_init'); function my_custom_init() { //Товары $labels = array( 'name' => 'Товары', 'singular_name' => 'Товар', 'add_new' => 'Добавить новый', 'add_new_item' => 'Добавить новый товар', 'edit_item' => 'Редактировать товар', 'new_item' => 'Новый товар', 'view_item' => 'Посмотреть товар', 'search_items' => 'Найти товар', 'not_found' => 'Товаров не найдено', 'not_found_in_trash' => 'В корзине товар не найден', 'parent_item_colon' => '', 'menu_name' => 'Товары' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'has_archive' => false, 'hierarchical' => true, 'menu_position' => 4, 'supports' => array('title','editor','thumbnail','page-attributes'), 'menu_icon' => 'dashicons-cart', 'taxonomies' => array( 'item_class' ), ); register_post_type( 'item', $args ); }; add_filter('post_updated_messages', 'object_updated_messages'); function object_updated_messages( $messages ) { global $post, $post_ID; $messages['object'] = array( 0 => '', // Не используется. Сообщения используются с киндекса 1. 1 => sprintf( 'Данные объекта обновлены. <a href="%s">Посмотреть</a>', esc_url( get_permalink($post_ID) ) ), 2 => 'Произвольное поле обновлено.', 3 => 'Произвольное поле удалено.', 4 => 'Объект обновлён.', /* %s: дата и время ревизии */ 5 => isset($_GET['revision']) ? sprintf( 'Запись объекта восстановлена из ревизии %s', wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, 6 => sprintf( 'Запись объекта опубликована. <a href="%s">Посмотреть</a>', esc_url( get_permalink($post_ID) ) ), 7 => 'Объекта сохранён.', 8 => sprintf( 'Объект сохранён. <a target="_blank" href="%s">Предпросмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), 9 => sprintf( 'Запись объекта запланирована на: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Предпросмотр</a>', // Как форматировать даты в PHP можно посмотреть тут: http://php.net/date date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ), 10 => sprintf( 'Черновик объекта обновлен. <a target="_blank" href="%s">Предпросмотр</a>', esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ), ); return $messages; };
Далее идет подключение метабоксов.
Выводятся посты обычным get_posts, в админке метабоксы выводятся как обычно.
function extra_item( $post ){ ?> <p> Единица товара <i>(шт, кг, м, уп.)</i><br> <input class="pcomplex_option" name="options[pcomplex_edt]" id="options[pcomplex_edt]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_edt', true); ?>" style="width : 90px;"/> </p><p> Размеры <i>(Д-Ш-В), см</i><br> <input class="pcomplex_option" name="options[pcomplex_razmer_d]" id="options[pcomplex_razmer_d]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_razmer_d', true); ?>" style="width : 90px;"/> <input class="pcomplex_option" name="options[pcomplex_razmer_sh]" id="options[pcomplex_razmer_sh]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_razmer_sh', true); ?>" style="width : 90px;"/> <input class="pcomplex_option" name="options[pcomplex_razmer_v]" id="options[pcomplex_razmer_v]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_razmer_v', true); ?>" style="width : 90px;"/> </p><p> Вес, кг<br> <input class="pcomplex_option" name="options[pcomplex_ves]" id="options[pcomplex_ves]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_ves', true); ?>" style="width : 90px;"/> </p><p> Материал <br> <input class="pcomplex_option" name="options[pcomplex_material]" id="options[pcomplex_material]" type="text" value="<? echo get_post_meta($post->ID, 'pcomplex_material', true); ?>" style="width : 100%;"/> <input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" /> <? };
что может сделать хостер в этой ситуации, какие данные предоставить?
Хочу акцентировать момент — тормоза происходят ТОЛЬКО в админке и ТОЛЬКО на страницах архива/добавления/редактирования/таксономии определенного типа записи. Все остальные разделы админки и пользовательская часть работают нормально.
Попробуйте скачать текущую ночную сборку 4.3-alpha и скопировать из файла
wp-includes/post.php
функцию get_page_children() вместо той, что в версии 4.2.2 — она недавно была оптимизирована.Попробуйте скачать текущую ночную сборку 4.3-alpha и скопировать из файла wp-includes/post.php функцию get_page_children() вместо той, что в версии 4.2.2 — она недавно была оптимизирована.
Большущее спасибо.
Сначала подредактировал код, но забыл залить на ftp — естессно ничего не изменилось.
Однако когда я все-таки обновил файл, произошло маленькое чудо, — время генерации страницы сократилось с чудовищных 60 секунд до 7 — 14. Но чудо маленькое, потому что проблема с огромной памятью в админке ( от 110 мб ) осталась, да и 7 секунд конечно тоже много, хотя и не сравнить с тем что было конечно.
Друзья, какие есть еще мысли? Задача какая-то нестандартная прямГоспода, дополнительная информация.
Оказывается, любые пользователи, кроме пользователя с правами админа, при попытке посмотреть архив этого типа записи, нагружают память сильнее настолько, что сервер падает (почти 200мб).Прошу, поделитесь какие есть мысли, куда копать..
Я отчаялся уже
- Тема «WordPress виснет при большом количестве страниц» закрыта для новых ответов.