Método correto para executar scripts com dependências sem enfileiramento?

4

Com o enfileiramento, você alteraria $deps para seu script ou matriz de scripts necessários para ser executado primeiro para que seu script funcione.

<?php wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer ); ?>

Por exemplo:

function script_that_requires_jquery() {
    wp_register_script( 'script-with-dependency', 'http://www.example.com/script-with-dependency.js', array( 'jquery' ), '1.0.0', true );
    wp_enqueue_script( 'script-with-dependency' );
}
add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery' );

Geralmente faço isso, mas nem sempre parece funcionar:

function script_that_requires_jquery(){
    if ( wp_script_is( 'jquery', 'done' ) ) { ?>
        <script type="text/javascript">
        (function($) {
            // jquery function goes here    
        })( jQuery );
        </script>
    <?php }
}
add_action('wp_footer', 'script_that_requires_jquery');

Talvez seja isso?

function script_that_requires_jquery(){
    wp_enqueue_script( 'jquery' );
    ?>
        <script type="text/javascript">
        (function($) {
            // jquery function goes here    
        })( jQuery );
        </script>
    <?php 
}
add_action('wp_footer', 'script_that_requires_jquery');
    
por Bryan Willis 18.07.2014 / 02:38

2 respostas

4
function script_that_requires_jquery() {
    wp_register_script( 'script-with-dependency', 'http://www.example.com/script-with-dependency.js', array( 'jquery' ), '1.0.0', true );
    wp_enqueue_script( 'script-with-dependency' );
}
add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery' );

Este é o método correto para enfileirar scripts (e estilos para esse assunto). Você deve sempre estar usando wp_enqueue_scripts para enganchar scripts e estilos.

Há algumas coisas aqui para verificar quando você registra scripts e estilos. Em primeiro lugar, certifique-se de que a ordem em que você está colocando dentro da sua função está correta. O primeiro script na função será executado primeiro, o segundo segundo, etc. Então, você não pode colocar seu script dependente do jquery antes do jquery, ele não funcionará

A outra armadilha em potencial aqui é add_action( $hook, $function_to_add, $priority, $accepted_args ); . Sem definir o parâmetro $priority , há sempre o perigo de que seu script / estilo seja carregado antes de outros scripts / estilos que possam substituir o seu.

No seu caso, seu script pode ser carregado antes do jquery, então não funcionará. Eu sempre defino esse parâmetro com uma prioridade muito baixa (número muito alto) quando adiciono scripts e estilos personalizados. Isso garante que meus scripts e estilos sejam carregados por último. Então eu farei algo assim

add_action( 'wp_enqueue_scripts', 'script_that_requires_jquery', 999 );
    
por Pieter Goosen 18.07.2014 / 06:37
0

Não é suficiente enfileirar jquery (ou qualquer outra biblioteca) antes de seu código dependente de jquery, mas você também precisa ter certeza de que jquery é carregado antes de seu código ser analisado / executado pelo navegador.

    
por Mark Kaplun 18.07.2014 / 13:04