Отсутствие опции "category_children" при динамическом создании категорий через плагин
Я определил источник критической ошибки, которая возникает при предпросмотре нового сайта сразу после установки и активации разрабатываемого мной плагина.
Проблема заключается в том, что элемент "category_children" в таблице опций не создается автоматически.
Интересно, что есть два действия, которые заставляют WordPress создать опцию 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, спасибо за публикацию. Полностью поддерживаю! Я уже голову сломал, пытаясь разобраться. Проверю баг-репорт и предложенное решение.

@Scribu: если опция не существует (проверил через options.php), будет ли ручное удаление работать как временное решение?

Просто чтобы уточнить: мне нужно просто вызвать delete_option("category_children") после создания категорий с родителями? Извините, но я не увидел упоминания этого решения в комментариях к багу.

Обновление: решение - добавить эту строку после вставки категорий > clean_term_cache('','category');

Обновление 2: Похоже, есть проблема при вызове исправления clean_term_cache из того же плагина в момент создания категорий. Если поместить вызов в отдельный плагин и запустить его после первого плагина, то всё работает, но не в том же плагине, который создаёт категории.

@Scribu: Можешь уточнить, что ты имеешь в виду под "удалением опции"? У меня это не сработало, и я не нашёл упоминания этого обходного пути в отчёте об ошибке.

http://core.trac.wordpress.org/ticket/18628 также выглядит релевантным

Этот баг также влияет на иерархические таксономии? Когда я программно создаю термины в иерархической пользовательской таксономии, я не вижу иерархию, отражённую в админке на странице /edit-tags.php?taxonomy=MY_TAX_HERE. Мне приходится делать быстрое обновление любого из терминов, чтобы увидеть актуальную иерархию. Также clean_term_cache('MY_TAX_HERE'); не помогает.
