• Здравствуйте уважаемые друзья.
    Требуется совет гуру.
    На сайте около 4500 записей (пользовательский тип). С момента примерно в 2000 записей появились жуткие тормоза админки, причем именно на страницах архива или добавления этого типа записи.
    Были мысли, что нагрузку дает wp-cron.php, это подтверждалось логами, на которых wp_cron вылетал с ошибкой 500. Но его отключение в конфиге

    define('DISABLE_WP_CRON', true);
    define('ALTERNATE_WP_CRON', false);

    результата не принесло.

    Цифры : Память более 100 мб, время генерации страницы от 10 до 60 сек.

    Какие есть мысли?
    Спасибо

Просмотр 12 ответов — с 16 по 27 (всего 27)
  • а что у вас крон делает то?
    вы с этим разберитесь.

    а что у вас крон делает то?
    вы с этим разберитесь.

    Дак у меня ничего особенного он не делает, я бы и хотел как раз уточнить, что именно входит в его обязанности, из-за чего он может вешать систему.

    вы в самом первом сообщении сказали, что отключение крона ни к чему не приводит. но потом почему-то решили, что отключенный крон и есть проблема.

    вы в самом первом сообщении сказали, что отключение крона ни к чему не приводит. но потом почему-то решили, что отключенный крон и есть проблема.

    Я не решил, я предположил. Конечно, отключенный крон должен был решить проблему, если это он. Просто я не знаю куда уже думать.

    остается только узнать, каким кодом у вас добавляется\выводится произвольный тип записей. а то инструкций по этому поводу слишком уж много, в некоторых даже прямые 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__); ?>" />
    <?
    };

    что может сделать хостер в этой ситуации, какие данные предоставить?

    Хочу акцентировать момент — тормоза происходят ТОЛЬКО в админке и ТОЛЬКО на страницах архива/добавления/редактирования/таксономии определенного типа записи. Все остальные разделы админки и пользовательская часть работают нормально.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте скачать текущую ночную сборку 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мб).

    Прошу, поделитесь какие есть мысли, куда копать..
    Я отчаялся уже

Просмотр 12 ответов — с 16 по 27 (всего 27)
  • Тема «WordPress виснет при большом количестве страниц» закрыта для новых ответов.