Cómo agregar Javascript correctamente en functions.php


10

Me gustaría eliminar algunas flechas de aspecto feo que son estándar en los botones de carrito en WooCommerce. Para lograr esto, encontré un consejo al agregar el siguiente código, que debería eliminar las flechas cuando el documento se ha cargado.

Supongo que lo voy a poner en mis functions.php? ¿Cómo exactamente haría eso?

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

EDITAR

Bueno. He intentado este enfoque:

Hice un archivo llamado 'removeArrows.js' y lo coloqué en mi carpeta de complementos. Tiene el mismo contenido que el código original, excepto jQuery en su lugar $. Luego agregué lo siguiente a 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' ); 

No puedo entender cómo hacer que el código se muestre correctamente. Esto no funcionó. ¿Alguna sugerencia para hacer que esto funcione?

Fuente de fragmentos de jQuery


Eso es una locura: ¿no puedes editar las flechas en el código que las genera? (¿O se descarga de una fuente externa?) En cualquier caso, puede hacer ambos reemplazos en una sola función para evitar leer y escribir dos veces todo el HTML dentro del bloque del carrito. No sé cómo inyectarlo directamente en la página desde functions.php, pero puede guardarlo en un archivo de script separado (si aún no tiene uno, puede agregarlo) y luego wp-enqueue-script. También tendrá que cambiar el $s a jQuery(consulte la sección 7 de la página)
Rup

No, estoy bastante seguro de que no se puede quitar antes de insertarlo. Si puede, no he podido encontrar una manera de hacerlo. Buen punto sobre agregarlo en una sola función. ¿Se vería así? $ (document) .ready (function () {$ (". woocommerce-cart"). html (function (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Examinaré el script en cola. Aunque parece un poco complicado ... ¡Gracias!
user2806026

Bueno. Intenté este enfoque; Hice un archivo llamado 'removeArrows.js' y lo coloqué en mi carpeta de complementos. Tiene el mismo contenido que el código original, excepto jQuery en su lugar $. luego agregué lo siguiente a functions.php; `function wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', FILE ), array ('jquery'), '1.1', verdadero); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Lo siento, no puedo entender cómo hacer que el código se muestre correctamente) Esto no funcionó. ¿Me pueden ayudar a arreglarlo?
user2806026

1
Presente una edición y agregue toda la información relevante directamente a su pregunta . No use la sección de comentarios para agregar código
Pieter Goosen

Respuestas:


10

Tu $scren tu wp_register_script()función está mal. Dado que su functions.php está dentro de su complemento y su removeArrows.js está en la raíz de su complemento, $scrdebería verse así

plugins_url( '/removeArrows.js' , __FILE__ )

Otro punto a destacar es que siempre es una buena práctica cargar los scripts y los estilos al final. Esto asegurará que otros scripts y estilos no lo anulen. Para hacer esto, simplemente agregue una prioridad muy baja (número muy alto) a su parámetro de prioridad ( $priority) de add_action.

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

Y siempre cargue / ponga en cola los scripts y estilos a través del wp_enqueue_scriptsgancho de acción, ya que este es el gancho adecuado para usar. No cargue scripts y estilos directamente en wp_headowp_footer

EDITAR

Para los temas, como ha indicado que ahora movió todo a su tema, $scrcambiaría a esto

 get_template_directory_uri() . '/removeArrows.js'

para temas principales y esto

get_stylesheet_directory_uri() . '/removeArrows.js'

para temas infantiles. Su código completo debería verse así

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 ); 

Muchas gracias por tu gran consejo. Este parece ser el enfoque para usar. Una pregunta sin embargo; the functions.php está en mi carpeta de temas. ¿Cómo vincularía el archivo js si está en la misma carpeta raíz del tema?
user2806026

Debe mantener todo en un complemento o en un tema, no los divida. Si está en un tema, $scrsería get_template_directory_uri() . '/removeArrows.js'para temas principales y get_templatestylesheet_directory_uri() . '/removeArrows.js'para temas infantiles
Pieter Goosen

Intenté nuevamente, esta vez agregando removeArrows.js directamente en la carpeta del tema y usando lo siguiente en functions.php; función wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), array ('jquery'), '1.1', verdadero); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); esto me da un error de análisis: error de sintaxis, inesperado ',' en la línea wp_register_script.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)debería serget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

No Usó su código completo que editó en la parte inferior de su publicación original. Lo único que hace es congelar la página del carrito al ver el contenido. Creo que me rendiré :-) Sin embargo, un último recurso; comenzaste mencionando que get_template_directory_uri () es para temas principales, y luego en el código final completo que es para temas secundarios. Cual es Mi tema es un padre :-)
user2806026

4

No agregaría otro archivo js externo, es solo un recurso adicional e innecesario para obtener y eso es algo que queremos reducir en términos de tiempos de carga de la página.

Agregaría este fragmento de jQuery en la cabeza de su sitio web usando el wp_headgancho. Pegaría lo siguiente en su tema o archivo de funciones de complementos. También me he asegurado de que jQuery esté en modo sin conflicto, como puede ver a continuación.

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

Una vez que haya hecho esto y haya actualizado su página, verifique el origen de la página para asegurarse de que este fragmento de jQuery se esté cargando en su página. Si es así, debería funcionar a menos que haya algo fuera del fragmento de jQuery real que está utilizando.


Sin embargo, esa no es la forma de WordPress de cargar Javascript. Ver wp_enqueue_script()para más información.
Pat J

2
Hola @PatJ, estoy de acuerdo, para cargar una biblioteca JS externa o un archivo JS con todas sus funciones de Javascript, entonces sí, esa sería la forma correcta. Sin embargo, si está cargando un fragmento de Javascript, no tiene sentido crear un archivo JS completamente nuevo y agregar una solicitud HTTP adicional solo para eso. Tomemos como ejemplo Google Analytics, en el 99% de los temas o compilaciones personalizadas, el JS se agregará al encabezado o pie de página a través de las opciones de tema o el archivo de funciones. Su práctica común es incluir fragmentos JS o incluso CSS de esta manera.
Matt Royal

1
Sin embargo, la "práctica común" no lo hace correcto. Los wp_enqueue_script()documentos incluso indican que este es el método recomendado para vincular JavaScript a una página generada por WordPress .
Pat J

Si toma el tema predeterminado de WordPress catorce años, carga html5.js en el header.php. De acuerdo con esto, por una razón, para verificar que el navegador cumpla con la condición de ser IE <9, pero mi punto es que, comprensiblemente, el método recomendado y preferido es la puesta en cola, pero depende de todas las demás variables / circunstancias que rodean estamos tratando de lograrlo, no siempre es lo más práctico y creo que se debe usar un poco de discreción. Mira, también podría estar completamente equivocado en este punto de vista, estoy interesado en escuchar lo que algunos de los muchachos realmente experimentados tienen que decir :-)
Matt Royal

Gracias por tu gran sugerencia. Sin embargo, no puedo hacer que funcione; si agrego su código dentro de la etiqueta <? php de mis functions.php me sale un 'Error de análisis: error de sintaxis, inesperado' <'en /somepath.../functions.php en la línea 1146'. Si lo agrego fuera de <? Php, simplemente parece hacer eco del código dado en la parte superior de la página. ¿Que me estoy perdiendo aqui?
user2806026

0

Como la respuesta ya está aceptada, solo quiero decir que hay otra forma de poner en cola el código de JavaScript en el pie de página, lo que he hecho muchas veces.

en el archivo 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' );

puede cargar este script en una plantilla de página en particular solo usando la condición

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;

si el page-template.php está en el directorio (digamos el directorio de plantillas en el directorio raíz de su tema) puede escribir como:

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

No recomendaría "hornear" el JavaScript en el pie de página de esta manera. Evita que sea inenganchable o modificable (al menos, fácilmente), lo cual es extremadamente importante en el desarrollo de plugins y temas. Si usted es el usuario final de un sitio y necesita un script rápido o algo así, hágalo, pero aún así wp_enqueue_script()es casi siempre universalmente mejor y más flexible.
Xhynk

-1

Para responder a la pregunta, primero debemos hacer una distinción entre javascript y JQuery.

Para decirlo de una manera simple:

  • Javascript se basa en ECMAScript
  • JQuery es una biblioteca para Javascript

Entonces, en realidad, haces dos preguntas diferentes:

  • Tu título habla de una solución para implementar JavaScript
  • Su pregunta habla sobre una solución para implementar JQuery

Debido a que los resultados de Google muestran su título y todo el contenido de la página habla de JQuery, esto puede ser muy frustrante para las personas que buscan una solución de JavaScript.

Y ahora para la solución JQuery:

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

Y la solución de JavaScript:

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

Este código se puede agregar a sus functions.php La ubicación de los scripts en ambos casos es wp-content/themes/theme-name/js/script.js

¡Feliz codificación!


Alrededor del tiempo en que OP publicó, los desarrolladores usaron jquery y javascript indistintamente. No es del todo exacto, pero era lo popular que era jquery y la cantidad de funciones que faltaban en JavaScript.
Rocky Kev
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.