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

Это означает, что PHP попытался использовать больше памяти, чем разрешено настройкой memory_limit.

В первую очередь необходимо понять, в каком файле и на каком участке кода появляется ошибка. Если в сообщении указан конкретный плагин, тема или файл, начинать поиск проблемы нужно именно с него.

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

Очень часто подобные ошибки встречаются с конструкцией query_posts и при больших вложенных запросах.

query_posts( array(
  'post_type' => 'posts',
  'showposts' => '-1'
));

В данном случае WordPress пытается получить все записи указанного типа. Если на сайте их несколько тысяч, такой запрос может потребовать достаточно много памяти.

Это лишь пример, на деле ошибка может появиться по любому поводу.

Не используйте query_posts

Отдельно стоит обратить внимание на функцию query_posts().

Она заменяет основной запрос WordPress новым запросом. При этом первоначальный запрос уже мог быть выполнен, поэтому в некоторых случаях получается лишняя работа. WordPress не рекомендует использовать query_posts() в темах и плагинах.

Если необходимо получить отдельный список записей, лучше использовать get_posts() или WP_Query.

$posts = get_posts( array(
   'post_type' => 'post',
   'posts_per_page' => 10
));

А если требуется изменить основной запрос страницы, для этого лучше использовать pre_get_posts.
Также не стоит без необходимости использовать:

'posts_per_page' => -1

Такой параметр означает получение всех записей. На небольшом сайте это может быть незаметно, но при большом количестве записей такой запрос способен потреблять много памяти.

Самый простой способ решения

Если проблема действительно связана с нехваткой памяти, можно увеличить лимит для WordPress.

Для этого необходимо добавить в wp-config.php строку:

define('WP_MEMORY_LIMIT', '256M');

WordPress использует WP_MEMORY_LIMIT для ограничения памяти, доступной для работы сайта. Однако хостинг может запретить PHP увеличивать установленный лимит. В таком случае одна только эта строка не поможет.
Также у WordPress есть отдельный лимит для административной части:

define('WP_MAX_MEMORY_LIMIT', '256M');

Он используется для более ресурсоёмких операций в админке. Обычно его можно оставить выше или на том же уровне, что и WP_MEMORY_LIMIT.

Как проверить текущий лимит памяти

Посмотреть установленный лимит можно в WordPress в разделе Инструменты → Здоровье сайта → Информация → Сервер.

Там отображается значение PHP memory limit.

Это позволяет проверить, действительно ли после изменения wp-config.php лимит увеличился.

Если значение осталось прежним, скорее всего, хостинг не позволяет изменить его таким способом.

Другие варианты решения

Если изменение wp-config.php не помогло, можно попробовать увеличить memory_limit на уровне PHP.
На некоторых серверах для этого используется .htaccess, добавьте в него строку:

php_value memory_limit 256M

Но этот способ работает не на всех хостингах. В зависимости от настроек сервера такая строка может не сработать или даже привести к ошибке 500.

Более правильный вариант — изменить значение memory_limit в php.ini:

memory_limit = 64M ;

Но на обычном виртуальном хостинге доступа к этому файлу чаще всего нет. В таком случае необходимо обратиться в поддержку хостинга.

Если увеличение памяти не помогает

Если ошибка продолжает появляться даже после увеличения лимита, не стоит увеличивать его дальше.

Скорее всего, проблема находится в конкретном плагине, теме или кусочке кода.

Посмотрите на файл и строку, которые указаны в сообщении Fatal error. Если там указан файл плагина, можно временно отключить этот плагин и проверить, исчезла ли ошибка.

Если ошибка появилась после установки или обновления определённого плагина, стоит проверить именно его.

Также стоит обратить внимание на запросы к базе данных и код, который пытается обработать большое количество записей одновременно.

Например, если на сайте 10 000 записей, получение их всех одним запросом:

'posts_per_page' => -1

вряд ли будет хорошим решением. В большинстве случаев лучше ограничить количество записей и использовать пагинацию или обрабатывать данные частями.

Увеличение memory_limit в этом случае может только временно скрыть проблему. При дальнейшем росте сайта ошибка появится снова.
Поэтому оптимальный вариант — сначала найти причину большого потребления памяти, а уже потом при необходимости увеличить доступный лимит.