Отсутствие опции "category_children" при динамическом создании категорий через плагин

18 апр. 2011 г., 22:10:36
Просмотры: 1.17K
Голосов: 2

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

Проблема заключается в том, что элемент "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');

Однако это не работает при вызове из того же плагина, который создает категории. Мне пришлось поместить это в отдельный плагин, который активируется независимо от плагина, создающего мои категории.

0
Все ответы на вопрос 2
8

Это известная (и неприятная) ошибка в коде кэширования иерархии таксономий:

http://core.trac.wordpress.org/ticket/14485

По сути, вам нужно принудительно обновить кэш, удалив соответствующую опцию.

19 апр. 2011 г. 20:36:20
Комментарии

Привет Scribu, спасибо за публикацию. Полностью поддерживаю! Я уже голову сломал, пытаясь разобраться. Проверю баг-репорт и предложенное решение.

Scott B Scott B
19 апр. 2011 г. 20:42:20

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

Scott B Scott B
19 апр. 2011 г. 20:45:36

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

Scott B Scott B
19 апр. 2011 г. 21:06:09

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

Scott B Scott B
19 апр. 2011 г. 21:39:55

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

Scott B Scott B
19 апр. 2011 г. 22:42:23

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

Scott B Scott B
19 апр. 2011 г. 23:24:17

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

Ian Dunn Ian Dunn
11 июл. 2012 г. 01:44:20

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

Average Joe Average Joe
28 мар. 2013 г. 02:45:17
Показать остальные 3 комментариев
0

Была такая же проблема. Решил добавлением: delete_option("category_children")

После добавления категорий, по всей видимости, это сбрасывает кеш для категорий. Другие обходные пути мне не помогли.

22 дек. 2011 г. 20:23:02