Коротко — причина в том, что тема пытается обратиться к свойству $post->ID, когда глобальная переменная $post (или объект, возвращаемый get_queried_object()) равна null. В PHP 8 такое обращение вызывает предупреждение/фатальную ошибку "Attempt to read property 'ID' on null". Решения — обновить тему (если есть патч) или исправить проверку в коде хлебных крошек, добавив защиту от null.
Что сделать (пошагово)
1) Обновите
- Обновите Flatsome до последней версии (в большинстве случаев разработчики уже исправили совместимость с PHP 8).
- Обновите WordPress и плагины.
2) Быстрая диагностика — найти место ошибки
- В логах/сообщении об ошибке будет указано имя файла и строка. Если нет, можно поискать в теме:
grep -R "->ID" wp-content/themes/flatsome -n
или
grep -R "breadcrumb" wp-content/themes/flatsome -n
3) Исправление в теме (если обновление невозможно)
- Создайте дочернюю тему и исправляйте там файлы. Если правите прямо в теме — делайте бэкап.
- Пример типичной проблемы: в коде есть обращение $post->ID без проверки. Нужно заменить это на безопасный вариант.
Пример патча (замените место использования $post->ID на вызов безопасной функции):
Добавьте в functions.php дочерней темы (или в плагин с пользовательскими правками):
function my_safe_get_post_id() {
// сначала попробуем получить объект запроса (так бывает для архивов/таксономий)
$queried = get_queried_object();
if ( is_object( $queried ) && ! empty( $queried->ID ) ) {
return (int) $queried->ID;
}
// затем глобальный пост
$post = get_post();
if ( is_object( $post ) && ! empty( $post->ID ) ) {
return (int) $post->ID;
}
// как последнее средство — функция WP, возвращающая id текущего объекта запроса
return (int) get_queried_object_id();
}
И в файле хлебных крошек (например wp-content/themes/flatsome/.../breadcrumbs.php) найдите место, где используется $post->ID и замените примерно так:
// было
// $parent_id = $post->ID;
// стало
$parent_id = my_safe_get_post_id();
Если код ожидает сам объект $post, можно вместо этого получить объект безопасно:
$post = get_post( my_safe_get_post_id() );
// и проверить
if ( $post ) {
// работать с $post->ID, $post->post_parent и т.д.
}
Или короткая замена прямо в месте использования:
if ( isset( $post ) && is_object( $post ) ) {
$post_id = $post->ID;
} else {
$post_id = get_queried_object_id();
}
4) Проверка
- Включите WP_DEBUG и посмотрите, ушла ли ошибка.
- Протестируйте хлебные крошки на страницах портфолио, архивов и одиночных записей.
5) Альтернатива — временное подавление (не рекомендуется)
- Можно подавлять предупреждения, но это плохая практика. Лучше исправить код.
Если хотите, могу:
- подсказать точный файл и патч, если вы пришлёте стек ошибки (путь и строка) или полный фрагмент кода хлебных крошек из вашей темы;
- подготовить готовый фрагмент кода для замены в конкретном файле.