WordPress: Проблема при регистрации пользовательских таксономий (Custom Taxonomies)

При разработке плагинов для WordPress может потребоваться использование Таксономий. Существует несколько встроенных в WordPress таксономий (Categories, Tags), но чаще всего их недостаточно и приходится регистрировать свои собственные таксономии.

Для регистрации собственных таксономий  используется функция register_taxonomy. Подробно о процессе регистрации описано в Кодексе.

Проблемы

Итак, какие проблемы могут нас поджидать при использовании пользовательских таксономий после их регистрации? Cамой распространённой проблемой является недоступность просмотра архивной страницы таксономии на front-end. Есть две самые распространенные причины:

  • Постоянные ссылки(Permalinks). Часто после регистрации новой таксономии в WordPress программист забывает о том, что для каждой новой таксономии нужно переопределить Постоянные ссылки. Переопределение постоянных ссылок может быть осуществлено двумя способами. Первый заключается в простом переходе на страницу настроек Постоянных ссылок (Settings->Permalinks). После этого они автоматически переопределятся в соответствии с новыми таксономиями. Второй способ можно назвать автоматическим и заключается он в использовании специальной функции flush_rewrite_rules(). Документация к функции. Её нужно вызывать после регистрации новой таксономии. Настоятельно не рекомендуется вызывать её в любых случаях и при каждой загрузке страницы, так как процесс переопределения довольно сильно нагружает систему. Стоит вызывать flush_rewrite_rules() только если вы знаете, что была добавлена новая таксономия или пользовательский тип записи.
  • Еще одна проблема, из-за которой архивная страница таксономии может возвращать ошибку 404 это её неправильная регистрация. Очень часто разработчики дают возможность пользователям плагинов самим выбирать параметры для регистрации таксономий, и используют при этом некоторый интерфейс. Интерфейс дает возможность выбрать такие параметры как query_var, show_ui, hierarchical, rewrite и другие. Как правило, используется тег select или input[type="checkbox"] для отрисовки UI для выбора параметров. Так вот, при самой регистрации таксономии с помощью функции register_taxonomy программист иногда забывает о том, что перечисленные выше параметры должны быть булевыми (Boolean). Например:
register_taxonomy('writer','book',array(
    'hierarchical' => false, 
//Неправильно - 'hierarchical' => 'false' или 'hierarchical' => 'true'. То же самое проверьте для всех булевых значений.
    'labels' => $labels,
    'show_ui' => true,
    'update_count_callback' => '_update_post_term_count',
    'query_var' => true,
    'rewrite' => array( 'slug' => 'writer' ),
  ));

Внимательно используйте данную функцию и ваши настройки и всё заработает.

Если у вас есть чем дополнить этот список – пишите в комментариях.