Como adicionar um snippet de javascript ao rodapé que requer jQuery

23

Eu sei que posso adicionar um arquivo de script ao rodapé do wordpress que requer jquery usando este código:

<?php
function my_scripts_method() {
   // register your script location, dependencies and version
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery'),
       '1.0',
       true);
   // enqueue the script
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Mas e se eu quiser adicionar apenas um snippet normal de jquery inline, não um arquivo. Como isso pode ser feito.

Editar

Eu sei que posso usar esse script para adicionar algo ao rodapé:

<?php
function myscript() {
?>
<script type="text/javascript">
 // This depends on jquery
</script>
<?php
}
add_action('wp_footer', 'myscript');

Mas como especifico o script que é usado requer jquery para ser executado.

    
por Saif Bechan 06.11.2011 / 11:30
fonte

5 respostas

26

A maneira mais fácil de fazer isso é na verdade uma combinação de wp_enqueue_script e as ações de rodapé que Saif e v0idless já referenciaram. Eu uso frequentemente o jQuery em meus temas e plugins, mas também coloco todos os outros scripts no rodapé.

A melhor maneira de colocar as coisas na fila seria:

function myscript() {
?>
<script type="text/javascript">
  if ( undefined !== window.jQuery ) {
    // script dependent on jQuery
  }
</script>
<?php
}
add_action( 'wp_footer', 'myscript' );

function myscript_jquery() {
    wp_enqueue_script( 'jquery' );
}
add_action( 'wp_head' , 'myscript_jquery' );

Mas esse código é digitado presumindo que você é quem está enfileirando o script, ou seja, você está fazendo isso em seu próprio plug-in ou tema.

No momento, não há como adicionar um script in-line ao rodapé do WordPress e também carregá-lo com dependências. Mas existe uma alternativa, se você estiver disposto.

A alternativa

Quando o WordPress trabalha com scripts, ele os carrega internamente para um objeto para rastreá-los. Existem basicamente 3 listas dentro do objeto:

  • registrado
  • fila
  • concluído
  • to_do

Quando você registra um script com wp_register_scripts() , ele é colocado na lista registrada. Quando você wp_enqueue_script() o script, ele é copiado para a lista de filas. Depois de ter sido impresso na página, ele é adicionado à lista finalizada.

Então, ao invés de colocar seu script de rodapé em fila para exigir o jQuery, você pode documentar que ele precisa usar o jQuery e verificar programaticamente para garantir que o jQuery esteja carregado.

Isso usa wp_script_is() para verificar onde o script está listado.

function myscript() {
    if( wp_script_is( 'jquery', 'done' ) ) {
    ?>
    <script type="text/javascript">
      // script dependent on jQuery
    </script>
    <?php
    }
}
add_action( 'wp_footer', 'myscript' );

Você pode ser capaz de usar este mesmo código para forçar o jQuery a carregar o rodapé também, mas eu não testei isso ... então sua milhagem varia.

    
por EAMann 06.11.2011 / 18:22
fonte
11

Desde o wordpress 4.5, você pode adicionar scripts in-line por wp_add_inline_script() . Para adicionar um snippet de javascript ao rodapé que requer o jQuery, este código ajuda você a

function enqueue_jquery_in_footer( &$scripts ) {

    if ( ! is_admin() )
        $scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'enqueue_jquery_in_footer' );

function theme_prefix_enqueue_script() {
   if(!wp_script_is('jquery', 'done')) {
     wp_enqueue_script('jquery');
   }
   wp_add_inline_script( 'jquery-migrate', 'jQuery(document).ready(function(){});' );
}
add_action( 'wp_enqueue_scripts', 'theme_prefix_enqueue_script' );

wp_add_inline_script com o wordpress jquery

    
por Dhinju Divakaran 25.06.2016 / 08:44
fonte
1

Use a ação wp_footer como esta:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERT SCRIPT HERE **/
</script>
<?php
}
    
por v0idless 06.11.2011 / 15:17
fonte
0

Eu sei que OP quer especificar um requisito no jQuery, e os autores do WordPress devem ter permitido que os snippets sejam enfileirados ao lado dos arquivos de script, mas eles não fizeram isso, então eu recomendo não tentar forçar isto. Se você não quer mexer com a fila ou com a sua ordem, como eu (porque estou usando outros plugins que combinam e otimizam scripts), então a resposta é realmente usar a ação wp_footer da seguinte forma:

<?php

add_action(
    'wp_footer'
    , function() {
        ?>
        <script>
            if (window.jQuery) {
                // your snippet
            }
        </script>
        <?php
    }
    , 21 # after enqueued footer scripts
);
    
por Walf 25.07.2018 / 11:56
fonte
-2

Você pode usar a ação wp_footer para fazer isso. Verifique o códice para wp_footer .

    
por Rutwick Gangurde 06.11.2011 / 14:30
fonte