Где правильное место для регистрации / постановки в очередь скриптов и стилей

43

Я использую WordPress 3.1.4 сейчас. Я запутался с тем, где (какой хук) я использую:

  • зарегистрироваться и / или поставить в очередь
  • сценарии и стили
  • на передней и задней части?

Вопросов:

  • Какие правильные крючки использовать?
  • Все сценарии / стили регистрации / постановки в очередь в init?
  • Почему нету admin_print_styles-{xxx}?
JM на работе
источник

Ответы:

62

Почему регистрация и постановка в очередь имеют значение

  • это должно быть вовремя - раньше, чем будет запущен скрипт / стиль для вывода на страницу, иначе будет слишком поздно;

  • это должно быть условно - в противном случае вы загружаете вещи там, где они вам не нужны, и вызывают проблемы с производительностью и функциональностью, для этого вам нужно, чтобы среда WP была загружена до поздней стадии.

Три этапа процесса

  1. регистрация - это объясняет детали WP о скрипте / стиле и заставляет хранить эту информацию;

  2. enqueue - (часто объединяется с регистрацией в одном wp_enqueue_*()вызове) - это говорит WP о необходимости добавления сценариев / стиля в очередь в соответствии с его настройками (зависимости, загрузка верхнего / нижнего колонтитула).

  3. print - это происходит, когда WP обрабатывает очередь, пытается загрузить что-то конкретное для себя или когда вы явно делаете это с помощью wp_print_*()функции.

Внешняя структура функций и крючков

  • wp_head()

    • wp_head

      • (1) wp_enqueue_scripts()

        wp_enqueue_scripts " это то, что вам нужно

      • (8) wp_print_styles()

      • (9) wp_print_head_scripts()

  • wp_footer()

    • wp_footer

      • (10) wp_print_footer_scripts()

Это идет намного глубже, но это просто и достаточно для важных моментов:

  • wp_enqueue_scriptsявляется наиболее подходящим хуком для регистрации и организации сценариев и стилей в интерфейсе и предназначен именно для этого;

  • initне имеет к этому никакого отношения, это будет работать, но - прежняя рекомендация Кодекса использовать только его была неправильной ;

  • вы можете использовать сценарии очередей (не стили) для нижнего колонтитула в любой точке до wp_print_footer_scripts()вызова;

  • wp_print_*Хуки НЕ подходят для регистра / очереди , они являются точками в коде, когда вывод уже происходит. Они подходят для ручного / пользовательского сценария / вывода стиля.

А как насчет админа?

Ну, функциональность там еще сложнее, сложнее и вложеннее.

  • для начала просто используйте admin_enqueue_scriptsловушку (она передается $hook_suffixглобально для условных вещей ) для всего, это будет хорошо в большинстве случаев;

  • когда вам нужно что-то сложное - посмотрите admin-header.phpи откопайте оттуда соответствующие крючки.

А как насчет входа?

Там конкретный крючок назван login_enqueue_scripts.

Rarst
источник
Хм, в другом ответе на другой вопрос мне порекомендовали admin_print_scripts-{xxx}. Я обнаружил, что admin_print_scriptsэто называется, но не с, -{xxx}например. -edit.phpнапример. Насколько правдив этот ответ о постановке в очередь admin_print_scripts-xxxи что вы порекомендуете вместо него - предположим, я хочу включить сценарии / стили в страницу добавления / редактирования пользовательского типа записи (для метабокса)
JM на работе
5
@JM на работе, как указано выше моего личного мнения - держитесь подальше от *print*крючков, если вы действительно не знаете, зачем они вам нужны. И в целом они для печати , а не очереди . admin_enqueue_scriptshooks передает $hook_suffixпеременную, которая используется в тех динамических ловушках.
Первый
$hook_suffixвыглядит как post.php на моей странице редактирования портфолио, почему это так? Я подумал, что это также edit.php, как мне тогда определить, редактирую ли я / публикую портфель, а не нормальную публикацию?
JM на работе
@JM at Works честно говоря, эта переменная несколько неприятна :) В собственном плагине легче с этим справиться (возврат add_*_page()функции), но на родных экранах WP это могут быть разные вещи.
Rarst
К сожалению, когда я изменяю ловушку с wp_footer на wp_enqueue_scripts или admin_print_scripts, CSS исчезает и не появляется нигде в исходном коде. Вот код, который я использую: add_action ('wp_enqueue_scripts', 'addCSS'); Это НЕ работает, это работает add_action ('wp_enqueue_scripts', 'addCSS'); кроме этого, очевидно, добавляет CSS в нижний колонтитул. Что я делаю не так?
Коготь