Como adicionar Javascript corretamente no functions.php


10

Gostaria de remover algumas setas feias que são padrão nos botões do carrinho no WooCommerce. Para conseguir isso, achei uma dica de adicionar o código a seguir, que deve remover as setas quando o documento for carregado.

Suponho que vou colocá-lo em minhas funções.php? Como exatamente eu faria isso?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

EDITAR

OK. Eu tentei esta abordagem:

Criei um arquivo chamado 'removeArrows.js' e o coloquei na minha pasta de plugins. Ele tem o mesmo conteúdo que o código original, exceto jQuery em vez de $. Em seguida, adicionei o seguinte ao functions.php:

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

Não consigo descobrir como fazer com que o código seja exibido corretamente. Isso não funcionou. Alguma sugestão para fazer isso funcionar?

Origem do snippet do jQuery


Que loucura: você não pode editar as setas no código que as gera? (Ou é baixado de uma fonte externa?) Em qualquer caso, você pode fazer as duas substituições em uma única função para evitar ler e gravar todo o HTML dentro do bloco do carrinho duas vezes. Eu não sei como injetar isso diretamente na página de functions.php, mas você pode salvá-lo em um arquivo de script separado (se ainda não tiver um, pode adicioná-lo) e depois em wp-enqueue-script. Você também precisará alterar os $s para jQuery(consulte a seção 7 da página)
Rup

Não, tenho certeza de que não pode ser removido antes da inserção. Se puder, não consegui encontrar uma maneira de fazê-lo. Bom ponto de adicioná-lo em uma única função. Ficaria assim? $ (document) .ready (function () {$ (". woocommerce-cart"). html (function (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Vou analisar o script de enfileiramento. Parece um pouco complicado, no entanto .. Obrigado!
user2806026

OK. Eu tentei essa abordagem; Criei um arquivo chamado 'removeArrows.js' e o coloquei na minha pasta de plugins. Ele tem o mesmo conteúdo que o código original, exceto jQuery em vez de $. então eu adicionei o seguinte ao functions.php; `function wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', FILE ), matriz ('jquery'), '1.1', true); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Desculpe, não consigo descobrir como fazer com que o código seja exibido corretamente) Isso não funcionou. Você pode me ajudar a consertar isso?
user2806026

11
Por favor arquive um editar e adicionar todas as informações relevantes directamente à sua pergunta Não use a seção de comentários para adicionar código
Pieter Goosen

Respostas:


10

Seu $screm sua wp_register_script()função é errado. Dado que o seu functions.php está dentro do seu plugin e o removeArrows.js está na raiz do seu plugin, você $scrdeve se parecer com isso

plugins_url( '/removeArrows.js' , __FILE__ )

Outro ponto a ser observado, é sempre uma boa prática carregar seus scripts e estilos por último. Isso garantirá que ele não seja substituído por outros scripts e estilos. Para fazer isso, basta adicionar uma prioridade muito baixa (número muito alto) ao seu parâmetro de prioridade ( $priority) de add_action.

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

E sempre carregue / enfileire scripts e estilos por meio do wp_enqueue_scriptsgancho de ação, pois esse é o gancho adequado a ser usado. Não carregue scripts e estilos diretamente para wp_headouwp_footer

EDITAR

Para temas, como você indicou que agora mudou tudo para o seu tema, você $scrmudaria para este

 get_template_directory_uri() . '/removeArrows.js'

para temas-pai e isso

get_stylesheet_directory_uri() . '/removeArrows.js'

para temas infantis. Seu código completo deve ficar assim

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Muito obrigado pelo seu ótimo conselho. Essa parece ser a abordagem a ser usada. Uma pergunta, porém; O functions.php está na minha pasta de temas. Como vincularia o arquivo js se ele estiver na mesma pasta raiz do tema?
user2806026

Você deve manter tudo em um plug-in ou em um tema, não os divida. Se você estiver em um tema, o seu $scrseria get_template_directory_uri() . '/removeArrows.js'para temas pai, e get_templatestylesheet_directory_uri() . '/removeArrows.js'para childthemes
Pieter Goosen

Tentei novamente, desta vez adicionando o removeArrows.js diretamente na pasta do tema e usando o seguinte em functions.php; função wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), array ('jquery'), '1.1', true); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); isso me dá erro de análise: erro de sintaxe, inesperado ',' na linha wp_register_script.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)deveria serget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

Não. Utilizou o código completamente editado na parte inferior da postagem original. A única coisa que faz é congelar a página do carrinho ao visualizar o conteúdo. Acho que vou desistir :-) Um último recurso; você começou mencionando que get_template_directory_uri () é para temas principais e, em seguida, no código final completo que é para temas filho. Qual é? Meu tema é pai :-)
user2806026

4

Eu não adicionaria outro arquivo js externo, é apenas um recurso extra e desnecessário para buscar e isso é algo que queremos reduzir em termos de tempo de carregamento da página.

Eu adicionaria esse trecho do jQuery na cabeça do seu site usando o wp_headgancho. Você colaria o seguinte no seu arquivo de funções de tema ou plug-ins. Também verifiquei que o jQuery está no modo sem conflito, como você pode ver abaixo.

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

Depois de fazer isso e atualizar sua página, verifique a fonte da página para garantir que esse trecho de jQuery esteja sendo carregado na sua página. Se estiver, deve funcionar, a menos que haja algo errado no snippet do jQuery que você está usando.


Essa não é a maneira do WordPress de carregar o Javascript. Veja wp_enqueue_script()para mais informações.
Pat J

2
Oi @PatJ, eu concordo, por carregar uma biblioteca JS externa ou um arquivo JS com todas as suas funções Javascript, então sim, com certeza essa seria a maneira correta. No entanto, se você estiver carregando um trecho de Javascript, não faz sentido criar um novo arquivo JS inteiro e adicionar uma solicitação HTTP adicional apenas para isso. Tomemos o Google Analytics, por exemplo, em 99% dos temas ou construções personalizadas, o JS será adicionado ao cabeçalho ou rodapé por meio do arquivo de opções ou funções do tema. É prática comum incluir trechos de JS ou CSS dessa maneira.
Matt Real

11
A "prática comum" não a corrige. Os wp_enqueue_script()documentos afirmam que este é o método recomendado para vincular o JavaScript a uma página gerada pelo WordPress .
Pat J

Se você usar o tema padrão vinte e quatro do WordPress, ele carregará html5.js no header.php. Concedido dessa maneira por uma razão, a fim de verificar se o navegador atende à condição de IE <9, mas o que quero dizer é que, compreensivelmente, o enfileiramento é o método recomendado e preferido, mas dependendo de todas as outras variáveis ​​/ circunstâncias em torno do que você tentar alcançá-lo nem sempre é o mais prático e acho que deve ser usada alguma discrição. Olha, eu poderia estar completamente errado neste ponto de vista, bem, eu estou interessado em ouvir o que alguns dos caras realmente experientes têm a dizer :-)
Matt Real

Obrigado pela sua ótima sugestão. Eu não consigo fazê-lo funcionar; se eu adicionar seu código dentro da tag <? php do meu functions.php, recebo um 'Erro de análise: erro de sintaxe, um inesperado' <'em /somepath.../functions.php na linha 1146'. Se eu adicioná-lo fora do <? Php, ele simplesmente parece ecoar o código fornecido no topo da página. O que estou perdendo aqui?
user2806026

0

Como a resposta já foi aceita, quero apenas dizer que há outra maneira de enfileirar o código javascript no rodapé, que já fiz várias vezes.

no arquivo functions.php:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

você pode carregar esse script em um modelo de página específico apenas usando a condição

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

se o page-template.php estiver no diretório (por exemplo, diretório de templates no diretório raiz do seu tema), você pode escrever como:

is_page_template( 'templates/page-template.php' );

Eu não recomendaria "assar" o JavaScript no rodapé como este. Isso evita que ele seja inaceitável ou modificável (pelo menos facilmente), o que é extremamente importante no desenvolvimento de plugins e temas. Se você é o usuário final de um site e precisa de um script rápido ou algo assim, escolha - mas mesmo assim, wp_enqueue_script()quase sempre é universalmente melhor e mais flexível.
Xhynk

-1

Para responder à pergunta, primeiro precisamos fazer uma distinção entre javascript e JQuery.

Para afirmar de uma maneira simples:

  • Javascript é baseado em ECMAScript
  • JQuery é uma biblioteca para Javascript

Então, na realidade, você faz duas perguntas diferentes:

  • Seu título fala sobre uma solução para implementar javascript
  • Sua pergunta fala sobre uma solução para implementar o JQuery

Como os resultados do Google mostram seu título e todo o conteúdo da página fala sobre JQuery, isso pode se tornar muito frustrante para as pessoas que pesquisam uma solução javascript.

E agora para a solução JQuery:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

E a solução javascript:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

Este código pode ser adicionado às suas funções.php A localização dos scripts nos dois casos é wp-content/themes/theme-name/js/script.js

Feliz codificação!


Na época em que o OP postou, os desenvolvedores usavam jquery e javascript de forma intercambiável. Não é de todo preciso, mas foi o quão popular jquery era e quanto javascript estava faltando recursos.
Rocky Kev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.