Intereting Posts
Изменение формата файла сохраненных изображений В wordpress я манипулирую с ответом 404. Я хочу дать ответ до того, как ошибка 404 предоставлена ​​google Как добавить ссылку xml-stylesheet сразу после «открытого» тега xml в ленте rss2? Зарегистрированный виджет отображается на сводной панели Профили игроков WordPress + PHP get_page_by_title не работает при использовании с переменной Отображается ли wordpress.com в URL-адресе, если я покупаю специальную службу домена с WP.com Форма костюма с гравитацией и полем afc возвращается в систему пользователя создайте настраиваемое поле, которое позволит мне включить другие сообщения Ссылка на объект класса WordPress Добавление динамического файла Sitemap в нижний колонтитул Показывать текущие сообщения пользователя в запросе типа пользовательского сообщения Управление несколькими доменами из одного бэкэнд Ошибка при установке Контактный формуляр 7 Поиск результата персонализированного сообщения на той же странице шаблона

может register_post_type () быть безопасно вызван до init

Если я вызову register_post_type() перед действием init , будет ли мой плагин взрываться в огненном шаре при некоторых обстоятельствах? Кодекс говорит :

register_post_type должен вызываться только через действие init. Он не будет работать, если вызывается до «init», а аспекты только что созданного или измененного типа сообщений будут работать некорректно, если их вызывать позже.

Codex также говорит :

Обратите внимание, что вы должны вызвать register_post_type () перед admin_menu и после выполнения действий after_setup_theme. Хорошим крючком для использования является крючок инициализации.

Учитывая этот совет, я всегда регистрировал свой CPT в действии init . Это всегда хорошо срабатывало для меня, до сегодняшнего дня, когда я нашел проблему.

У меня есть плагин (еще не выпущенный в любом месте), который регистрирует электронные письма. Я использую его при тестировании. Он регистрирует CPT, который он использует для хранения журналов электронной почты. Все хорошо до сих пор. Сегодня, тестируя магазин Easy Digital Downloads, я заметил, что я получал ошибки, регистрируемые в debug.log, каждый раз, когда я вставлял новый почтовый журнал. Ошибка вызвана тем, что get_post_type_object() не находит мой CPT, потому что EDD отправляет электронные письма перед действием init .

Итак, после проверки того, что doco и груды других ссылок, включая WPSE, соглашаются, что «register_post_type должен быть вызван только через действие« init », я пошел дальше и изменил свой плагин, чтобы зарегистрироваться на plugins_loaded . Обратите внимание, что это действие предшествует действию after_theme_setup , поэтому я after_theme_setup оба вышеперечисленных фрагмента Codex.

Могу ли я это сделать, или я удалю некоторые проблемы при некоторых обстоятельствах?

BTW, когда я $wp_post_types содержимое $wp_post_types на plugins_loaded , у него уже есть все стандартные типы сообщений WordPress …

Edit: OK, я немой, EDD не отправляет электронные сообщения перед init , мне просто нужно увеличить приоритет моего крюка, чтобы побить его – теперь подключайте init в приоритет 1. Но вопрос все еще стоит …

Solutions Collecting From Web of "может register_post_type () быть безопасно вызван до init"

Короткий ответ: нет. Для канонического примера почему просто взгляните на собственные типы сообщений. Они регистрируются дважды во время загрузки каждой страницы:

  1. Довольно рано из-за соображений обратной совместимости и плагинов, возможно, ожидающих их существования.
  2. На init потому что теперь данные локали загружаются, а определения типа сообщений могут быть правильно переведены.

Так долго ответ – вы можете заставить его работать, но вы находитесь в мире боли и плохой производительности, чтобы это произошло правильно . Только не надо. 🙂