Пропали с сайта Рубрики и Записи – 404 ошибка. В админке они есть, при переходе из админки – из URL рубрика пропадает и тоже 404 ошибка
У меня причина была в Polylang
Правила перезаписи в базе данных сгенерированы для другой конфигурации сайта, скорее всего, для сайта с включенным плагином мультиязычности Polylang. Но сейчас структура ссылок настроена без языка, и поэтому WordPress не может найти ваши рубрики - он ищет их по неправильным правилам.
Важно понимать:
Polylang скрывает всё, у чего не назначен язык
Посмотрите поэтому свои рубрики!!! Возможно слетел язык с рубрики
У меня в общем была вот такая проблема:
сайт переносился через Duplicator. При переносе Polylang хранил языки рубрик в виде скрытых связей в базе. Связи эти «поплыли», записи подцепились нормально (en: 20, ru: 30), а рубрики – остались висеть в воздухе.
Polylang, скорее всего, был отключён
И он, как строгий вахтёр, начал проверять у каждой рубрики документ – А какой у тебя язык?.
Документа нет – рубрика прячется – ссылки ломаются – 404 на всех страницах, где хоть как-то замешана рубрика.
Код pll_set_term_language () — это как сказать вахтёру – Вот, впиши всем, кому не вписано, русский или английский, по алфавиту.
И он вписал. Вахтёр успокоился, рубрики вышли из тени, ссылки восстановились.
Решение:Добавьте в functions.php (Polylang должен быть включён)
Сохраните functions.php
Обновите главную страницу сайта
Сразу удалите этот код из functions.php
Зайдите в Настройки – Постоянные ссылки – Сохранить
Откройте список рубрик -теперь в колонке Languages должны появиться флажки
Проверьте рубрику и запись на сайтеadd_action( 'init', 'fix_category_languages', 999 ); function fix_category_languages() { if ( ! function_exists( 'pll_set_term_language' ) ) return; $cats = get_categories( array( 'hide_empty' => false ) ); foreach ( $cats as $cat ) { $current = pll_get_term_language( $cat->term_id ); // Назначаем язык ТОЛЬКО рубрикам без языка if ( ! $current ) { $lang = ( preg_match( '/[а-яА-ЯёЁ]/u', $cat->name ) || $cat->slug === 'ru' ) ? 'ru' : 'en'; pll_set_term_language( $cat->term_id, $lang ); error_log( 'Assigned ' . $lang . ' to: ' . $cat->name ); } } error_log( '=== CATEGORY LANGUAGES FIXED ===' ); }
Если когда-нибудь снова будете переносить сайт с Polylang – перед бэкапом зайдите в Polylang – Settings и выгрузите настройки, либо просто сделайте полный дамп БД через phpMyAdmin, а не через Duplicator – у него с мультиязычными плагинами вечная нелюбовь.