wp_insert_post вызывает Fatal Error

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

Сначала проблема была в том, что когда данные становились слишком большими, то аякс их терял (ведь есть максимальный допустимый предел передачи методом POST данных). Потом я ввел возможность сохранения надмерной порции промежуточных данных в файл И эта проблема отпала. Но начал вылазить другой баг:
В плагине используется функция wp_insert_post для вставки нового поста. Собственно говоря она вызывается после обработки каждой страницы парсенного сайта (точнее почти каждой, но это сейчас не суть). Так вот wp_insert_post на свой N-ый вызов теперь вызывает фатальную ошибку:

Fatal error: Allowed memory size of 73400320 bytes exhausted (tried to allocate 1966080 bytes) in /home2/…/wp-db.php on line 589

причем, если wp_insert_post не вызывается (то есть я его просто закоментировал), то ничего не происходит, и обработка продолжается.

Я поотлаживал и выяснил, что скачок потребления памяти происходит именно в wp_insert_post (точнее в wp_transition_post_status), причем это сильнее проявляется, когда пост планируется (то есть его статус не publish, а future. Чтобы стало понятнее, где происходит скачок, вот смотрите как я отлаживал:

function wp_transition_post_status($new_status, $old_status, $post) {

    echo memory_get_peak_usage();echo "-".$new_status."MET0<br>";

    do_action('transition_post_status', $new_status, $old_status, $post);

    echo memory_get_peak_usage();echo "-".$new_status."MET1<br>";

    do_action("${old_status}_to_$new_status", $post);

    echo memory_get_peak_usage();echo "-".$new_status."MET2<br>";

    do_action("${new_status}_$post->post_type", $post->ID, $post);

    echo memory_get_peak_usage();echo "-".$new_status."MET3<br>";
}

Результат:
18747184-futureMET0
24676648-futureMET1
24676648-futureMET2
38540144-futureMET3

Теперь вопрос к специалистам по wordpress: как переопределить эту функцию (wp_transition_post_status), чтобы она могла правильно запланировать пост, но не вызывала эти функции по умолчанию?

Тыримс

oldvovk, что вы имеете ввиду?

Anonymous
Отправить
Ответ на: