Переношу сайт-каталог на платформу WordPress.
В итоге в WordPress имеется 4580 рубрик, с вложенностью до 4-х уровней.
А также в результате переноса должно быть создано более 50 тыс. записей.
Код создания записи выглядит примерно так:
<?php
function saveSchool($url)
{
$start_time = microtime(true);
// здесь подготовка переменных для массива $post - не интересно...
$post = array(
'comment_status' => 'open',
'ping_status' => 'open',
'post_author' => 1,
'post_category' => array($this->currCatId),
'post_content' => $content,
'post_date' => $date_pub,
'post_date_gmt' => gmdate('Y-m-d H:i:s', strtotime($date_pub)),
'post_excerpt' => '',
'post_name' => '',
'post_status' => 'publish',
'post_title' => $title,
'post_type' => 'post',
);
$post_id = wp_insert_post( $post );
if (!is_wp_error($post_id) && $post_id > 0) {
add_post_meta($post_id, 'url', $url);
add_post_meta($post_id, 'address', $data['address']);
add_post_meta($post_id, 'phone', $data['phone']);
$this->_echo("Запись $post_id сохранена" . sprintf(" - %.3f с", microtime(true)-$start_time));
} else {
$this->_echo("ОШИБКА создания поста: {$article['title']} / " . $post_id->get_error_message(), 'red');
$this->_log("ОШИБКА создания поста: {$article['title']} / " . $post_id->get_error_message());
return null;
}
}
Однако столкнулся с такой ситуацией: изначально время выполнения wp_insert_post стало расти!
Сейчас скрипт продолжает работать, в базу добавлено всего то 2000 записей, а функции wp_insert_post и add_post_meta выполняются по 10 секунд и время растет каждый раз при увеличении количества записей.
Время выполнения трех функций add_post_meta() не более 0,05 секунд., проблема в wp_insert_post()
Удивительно еще и то что встречаются wp_insert_post() вставляющие запись за 0.440 секунд, на ряду с другими, которые делают это за более чем 10 секунд.
Я сначала думал что это какой-нибудь плагин у меня такую доп. нагрузку на wp_insert_post создает, отключил все плагины, удалил все ping-сервисы, естественно отключил механизм ревизий записей в WordPress - но ничего не помогло. Ясное дело что проблема в wp_insert_post и add_post_meta, неужели придется реализовывать вставку через прямые SQL-запросы не используя функционал WordPress ? Может есть какие-то подводные камни у wp_insert_post или с таблицей posts нужно что-то сделать? Может настройки MySQL подкрутить?