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

27

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 trecho normal do 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 especificar o script usado requer que o jquery seja executado.

Saif Bechan
fonte
Não existe uma função integrada para fazer isso que eu saiba, é por que wp_register_scripte wp_enqueue_scriptexiste, mas você pode verificar usando o próprio jquery.
Wyck
2
Desculpe o voto negativo, mas não acho que você entenda minha pergunta. Eu li o códice e conheço a opção. Mas eu não quero wp_enqueue_scriptum arquivo de script no rodapé, quero adicionar um trecho ao rodapé que requer jquery. Eu diminuí a votação da resposta diretamente retirada do códice. Eu li o códice e não encontrei uma resposta, é por isso que faço uma pergunta. Se você me redirecionar para o códice novamente eu voto negativo.
Saif Bechan
Obrigado wyck, acho que é esse o caso, obrigado por entender a pergunta corretamente. Acho que vou usar apenas um script JS externo em vez de ter certeza de que o script pode ser executado.
Saif Bechan

Respostas:

30

A maneira mais fácil de fazer isso é na verdade uma combinação wp_enqueue_scripte as ações de rodapé que Saif e v0idless já fizeram referência. Eu freqüentemente uso jQuery em meus temas e plugins, mas também coloquei todos os outros scripts no rodapé.

A melhor maneira de realmente enfileirar as coisas seria esta:

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 cortado pressupõe que você é quem enfileira o script, ou seja, você está fazendo isso em seu próprio plugin ou tema.

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

A alternativa

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

  • registrado
  • fila
  • feito
  • façam

Quando você registra um script pela primeira vez,wp_register_scripts() ele é colocado na lista de registrados. Quando você wp_enqueue_script()usa o script, ele é copiado para a lista de filas. Depois de impresso na página, é adicionado à lista de tarefas concluídas.

Portanto, em vez de enfileirar o script de rodapé para exigir o jQuery, você pode documentar que ele precisa usar o jQuery e apenas 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 usar esse mesmo código para forçar o jQuery a carregar no rodapé também, mas eu não testei isso ... então sua milhagem pode variar.

EAMann
fonte
seu snippet de código fornecido é aceito pelos padrões de desenvolvimento de plugins do WordPress? Se sim, então eu vou usá-lo no meu plugin ... por favor me dê uma resposta sobre isso ... #
laraib 19/16 /
O último trecho? Não. Os plug-ins do WordPress sempre devem enfileirar os requisitos de script. Forçar o jQuery a carregar fora do sistema de filas dessa maneira é apenas algo que você deve fazer em seu próprio site, onde controla 100% do ambiente. Nunca é apropriado que um plugin faça isso.
EAMann #
então você pode me dar um exemplo de trabalho para isso, por favor ... ????
Laraib 20/10/16
Porque estou desenvolvendo meu primeiro plug-in WordPress e eu adoraria que isso fosse aceito pela equipe do WordPress ... aguardando qualquer resposta, por favor ... dê a sua opinião sobre isso para que eu possa criar e aceitar meu plug-in ...
laraib
12

Desde o wordpress 4.5, você pode adicionar scripts embutidos por wp_add_inline_script(). Para adicionar um snippet javascript ao rodapé que requer jQuery, esse código ajuda você

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 jquery do wordpress

Dhinju Divakaran
fonte
1

Use a wp_footeração assim:

add_action( 'wp_footer', 'wpse33008');
function wpse33008() {
?>
<script type="text/javascript">
    /** INSERT SCRIPT HERE **/
</script>
<?php
}
v0idless
fonte
11
Esta não é uma boa resposta. Perguntei como eu poderia especificar o script necessário jQuery. Se o usuário não tiver o jquery executando, sua implementação não será executada.
Saif Bechan
0

Eu sei que o OP quer especificar um requisito no jQuery, e os autores do WordPress deveriam permitir que os snippets fossem enfileirados ao lado dos arquivos de script, mas não o fizeram, por isso recomendo não tentar forçá-lo. Se você não quiser mexer na fila ou na ordem em que está, como eu (porque estou usando outros plugins que combinam e otimizam scripts), a resposta é realmente usar a wp_footeração da seguinte maneira:

<?php

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

Você pode usar a wp_footeração para fazer isso. Verifique o codex para wp_footer .

Rutwick Gangurde
fonte
Eu sei, mas como você pode especificar que o script adicionado ao rodapé depende do jquery. Verifique minha edição para ser mais específico.
Saif Bechan
Você se incomoda em ler o códice antes de votar nas respostas das pessoas? Você já leu sobre o in_footerargumento wp_enqueue_script? Leia isto: codex.wordpress.org/Function_Reference/wp_enqueue_script . Ele mostra como usá-lo com a wp_footeração.
Rutwick Gangurde