Проблема переполнения памяти при работе с wp_insert_post()

Рассмотрим случай, когда остановка объектного кэширование решает проблему переполнения памяти, а такое при импорте данных в WP встречается очень часто.

Допустим, мы импортируем большой массив данных в WordPress. К примеру, нам нужно заполнить таблицу записей из другой базы данных, или CSV файла, или по API. Для этого у нас есть код, в котором мы используем функцию добавления записей wp_insert_post() или wp_update_post(). Эти функции после добавления записи в БД, добавляет данные в кэш, чтобы потом получить их без дополнительного запроса. Но нам не нужно кэширование при импорте, потому что по умолчанию кэш записывается в оперативную память и в результате импорта её может не хватить.

Поэтому, чтобы импорт работал как нужно, нужно выключить кэш до импорта и включим его после:

// запомним текущее состояние (это пример, что так тоже можно делать)
$was_suspended = wp_suspend_cache_addition();

// отключаем кэширование
wp_suspend_cache_addition( true );

// ТУТ ВАШ КОД ИМПОРТА. Объектное кэширование здесь уже не работает

// вернем прежнее состояние кэша обратно
wp_suspend_cache_addition( $was_suspended );

Ссылки по теме:

Эта заметка встроена в: wp_suspend_cache_addition()