Onde é o lugar certo para registrar / enfileirar scripts e estilos

43

Estou usando o WordPress 3.1.4 até agora. Estou confuso com onde (qual gancho) devo usar:

  • registrar e / ou enfileirar
  • scripts e estilos
  • em front-end e back-ends?

Questões:

  • Quais são os ganchos certos para usar?
  • Todos os scripts / estilos de registro / enfileiramento de front-end init?
  • Por que não existe admin_print_styles-{xxx}?
JM no Trabalho
fonte

Respostas:

62

Por que registrar e enfileirar é importante

  • deve chegar a tempo - antes que o script / estilo acabe sendo enviado para a página, caso contrário, é tarde demais;

  • deve ser condicional - caso contrário, você está carregando coisas nas quais não precisa e causa problemas de desempenho e funcionalidade; para isso, é necessário que o ambiente WP seja carregado no estágio final.

As três etapas do processo

  1. registrar - isso explica detalhes do WP sobre script / estilo e faz com que ele armazene essas informações;

  2. enfileirar - (geralmente agrupado com o registro em uma wp_enqueue_*()chamada) - isso informa ao WP para adicionar scripts / estilo à fila, de acordo com suas configurações (dependências, carregamento de cabeçalho / rodapé).

  3. print - isso acontece quando o WP processa a fila, tenta carregar algo específico para si ou quando você faz explicitamente com a wp_print_*()função.

Estrutura front-end de funções e ganchos

  • wp_head()

    • wp_head

      • (1) wp_enqueue_scripts()

        wp_enqueue_scripts " Isto é o que você precisa

      • (8) wp_print_styles()

      • (9) wp_print_head_scripts()

  • wp_footer()

    • wp_footer

      • (10) wp_print_footer_scripts()

É muito mais profundo, mas isso é simples e bom o suficiente para pontos importantes:

  • wp_enqueue_scriptsé o gancho mais apropriado para registrar e enfileirar scripts e estilos no front end e existe especificamente para isso;

  • initnão tem nada a ver com isso, funcionará, mas - a recomendação anterior do Codex de usar apenas estava incorreta ;

  • você pode se safar com scripts de enfileiramento (não estilos) para rodapé a qualquer momento antes da wp_print_footer_scripts()chamada;

  • wp_print_*ganchos NÃO são apropriados para registro / fila , são pontos no código quando a saída já está acontecendo. Eles são apropriados para saída manual / personalizada de script / estilo.

E o administrador?

Bem, a funcionalidade é ainda mais complexa, elaborada e aninhada.

  • para iniciantes, basta usar admin_enqueue_scriptshook (é transmitido $hook_suffixglobalmente por coisas condicionais ) para tudo, será bom na maioria dos casos;

  • quando você precisar de algo complexo - procure admin-header.phpe procure a partir daí os ganchos adequados.

E o login?

Há um gancho específico chamado login_enqueue_scripts.

Rarst
fonte
Hmm, em outra resposta a outra pergunta , eu fui recomendado admin_print_scripts-{xxx}. Eu achei que admin_print_scriptsfoi chamado, mas não com -{xxx}por exemplo. -edit.phppor exemplo. Como certo é que a resposta de enqueuing em admin_print_scripts-xxxeo que você vai recomendar ao invés - suponho eu quero incluir scripts / estilos em uma página tipo de pós personalizado add / edit (para METABOX)
JM no Trabalho
5
@JM at Work, como acima da minha opinião pessoal - fique longe dos *print*ganchos, a menos que você realmente saiba por que precisa deles. E no geral eles são para impressão , não para fila . admin_enqueue_scriptshooks passa a $hook_suffixvariável igual à usada nesses ganchos dinâmicos.
Rarst
$hook_suffixparece post.php na minha página de portfólio de edição, por que isso? Eu pensei que era edit.php também, como determinar se estou editando / postando um portfólio e não um post normal?
JM no Trabalho
@JM em trabalhos honestamente que variável é um pouco desagradável :) No próprio plugin é mais fácil lidar com isso (retorno de add_*_page()função), mas em telas WP nativas que podem ser coisas diferentes.
Rarst
Infelizmente, quando mudo o gancho de wp_footer para wp_enqueue_scripts ou admin_print_scripts, o CSS desaparece e não aparece em nenhum lugar no código-fonte. Este é o código que eu uso: add_action ('wp_enqueue_scripts', 'addCSS'); Isso NÃO funciona, isso funciona add_action ('wp_enqueue_scripts', 'addCSS'); exceto que obviamente adiciona o CSS ao rodapé. O que estou fazendo errado?
Talon