Я выделил источник фатальной ошибки, возникающей при предварительном просмотре нового сайта сразу после установки и активации подключаемого модуля, над которым я работаю.
Проблема заключается в том, что элемент «category_children» в таблице параметров не создается.
Интересно, что два действия запускают WP для создания опции category_children. Это: (1) Активация темы, которая содержит код для создания категорий и (2) Простой доступ к менеджеру категорий.
Если я сделаю что-либо из этого, после активации плагина будет создана опция category_children (предположительно из-за проверок в активации темы или загрузки edit-tags.php), и ошибка исчезнет.
Вот код, который я использую в своем плагине для создания категорий (выполняется только при активации плагина):
if(!get_cat_ID('nofollow')){wp_create_category('nofollow',1);}
if(!get_cat_ID('noindex')){wp_create_category('noindex',1);}
Что мне не хватает? Нужно ли явно вызывать метод, чтобы WordPress сгенерировал массив параметров category_children для этих элементов?
ОБНОВЛЕНИЕ: благодаря приведенной ниже помощи scribu по причине этой ошибки я обнаружил, что ЧАСТИЧНОЕ исправление этой ошибки состоит в том, чтобы поместить эту строку сразу после завершения моих вызовов wp_create_category():
clean_term_cache('','category');
Однако это не работает при вызове в том же плагине, который создает категории. Мне пришлось разместить его в отдельном плагине, который активируется отдельно от плагина, который создает мои категории.
Это известная (и неприятная) ошибка в коде кэширования иерархии таксономии:
http://core.trac.wordpress.org/ticket/14485
По сути, вам нужно принудительно обновить, удалив параметр.
Привет Scribu, спасибо за публикацию этого. +1 за это! Я рвал на себе волосы, пытаясь понять это. Я проверю отчет об ошибке и предлагаемый вами обходной путь.
@Scribu: если параметр не существует (подтверждено просмотром options.php), его удаление вручную по-прежнему работает как обходной путь?
Просто для ясности: мне просто нужно вызвать delete_option(«category_children») после создания родительских категорий? Извините, но я не видел ссылки на обходной путь в комментариях к отслеживанию ошибок.
Обновление: исправление заключается в размещении этой строки после вставки категории > clean_term_cache(»,’category’);
Обновление 2. Возникла проблема при вызове исправления clean_term_cache, описанного выше, из того же плагина одновременно с созданием категорий. Я могу поместить вызов в отдельный плагин и запустить его после первого плагина, и он работает, но не в том же плагине, который создает кошек.
Была такая же проблема. Это было решено добавлением:
delete_option("category_children")
После вставки категорий видимо это сбрасывает кеш для категорий. Другие обходные пути не помогли мне.