При разработке плагинов для 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' ), ));
Внимательно используйте данную функцию и ваши настройки и всё заработает.
Если у вас есть чем дополнить этот список – пишите в комментариях.