Come aggiungere correttamente Javascript in functions.php
Vorrei rimuovere alcune frecce antiestetiche che sono standard sui pulsanti del carrello in WooCommerce. Per ottenere questo, ho trovato un suggerimento di aggiungere il seguente codice, che dovrebbe rimuovere le frecce quando il documento è stato caricato.
Suppongo di doverlo inserire nel mio functions.php? Come dovrei fare esattamente?
$(document).ready(function() {
$(".woocommerce-cart").html(function(i, val) {
return val.replace(" →", "");
});
$(".woocommerce-cart").html(function(i, val) {
return val.replace("← ", "");
});
});
MODIFICA
Ok. Ho provato questo approccio:
Ho creato un file chiamato 'removeArrows.js' e l'ho posizionato nella mia cartella dei plugin. Questo ha lo stesso contenuto del codice originale, eccetto jQuery invece di $. Poi ho aggiunto quanto segue 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' );
Non riesco a capire come far visualizzare correttamente il codice. Questo non ha funzionato. Avete suggerimenti per farlo funzionare?

Il tuo $scr
nella funzione wp_register_script()
è sbagliato. Considerando che il tuo functions.php si trova all'interno del tuo plugin, e removeArrows.js è nella radice del tuo plugin, il tuo $scr
dovrebbe essere così:
plugins_url( '/removeArrows.js' , __FILE__ )
Un altro punto da notare è che è sempre buona pratica caricare i tuoi script e stili per ultimi. Questo garantirà che non vengano sovrascritti da altri script e stili. Per farlo, basta aggiungere una priorità molto bassa (un numero molto alto) al parametro di priorità ($priority
) di add_action
.
add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
E sempre carica/enqueuea script e stili tramite l'hook di azione wp_enqueue_scripts
, poiché è l'hook corretto da utilizzare. Non caricare script e stili direttamente in wp_head
o wp_footer
.
MODIFICA
Per i temi, come hai indicato di aver spostato tutto nel tuo tema, il tuo $scr
cambierebbe in questo:
get_template_directory_uri() . '/removeArrows.js'
per i temi genitore e questo:
get_stylesheet_directory_uri() . '/removeArrows.js'
per i temi figlio. Il tuo codice completo dovrebbe essere così:
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 );

Grazie mille per il tuo ottimo consiglio. Sembra l'approccio giusto da usare. Una domanda però; il functions.php è nella cartella del mio tema. Come dovrei collegare il file js se si trova nella stessa cartella radice del tema?

Dovresti mantenere tutto in un plugin o in un tema, non dividerli. Se sei in un tema, il tuo $scr
sarebbe get_template_directory_uri() . '/removeArrows.js'
per i temi genitore, e get_templatestylesheet_directory_uri() . '/removeArrows.js'
per i temi figlio

Ho provato di nuovo, questa volta aggiungendo direttamente il removeArrows.js nella cartella del tema e usando quanto segue in functions.php; function 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 );
questo mi dà l'errore Parse error: syntax error, unexpected ',' sulla riga wp_register_script.

get_template_directory_uri() . '/removeArrows.js', FILE)
dovrebbe essere semplicemente get_template_directory_uri() . '/removeArrows.js'

No. Ho usato il tuo codice completo che hai modificato alla fine del tuo post originale. L'unica cosa che fa è bloccare la pagina del carrello quando visualizzo i contenuti. Penso che mi arrenderò :-) Un ultimo tentativo però; hai iniziato dicendo che get_template_directory_uri() è per i temi genitore, e poi nel codice completo finale che è per i temi figlio. Qual è la verità? Il mio tema è un genitore :-)

Non aggiungerei un altro file js esterno, è solo una risorsa aggiuntiva e non necessaria da recuperare e questo è qualcosa che vogliamo ridurre in termini di tempi di caricamento della pagina.
Aggiungerei questo snippet jQuery nell'head del tuo sito utilizzando l'hook wp_head
. Dovresti incollare il seguente codice nel file functions del tuo tema o plugin. Ho anche assicurato che jQuery sia in modalità no-conflict come puoi vedere qui sotto.
add_action('wp_head','woocommerce_js');
function woocommerce_js()
{ // esci da php ?>
<script>
jQuery(document).ready(function($) {
$(".woocommerce-cart").html(function(i, val) {
return val.replace(" →", "");
});
$(".woocommerce-cart").html(function(i, val) {
return val.replace("← ", "");
});
});
</script>
<?php } // rientra in php
Dopo aver fatto questo e aver aggiornato la pagina, controlla il codice sorgente per assicurarti che questo snippet jQuery venga effettivamente caricato nella tua pagina. Se è così, dovrebbe funzionare a meno che non ci sia qualcosa di sbagliato nello snippet jQuery che stai utilizzando.

Non è il modo WordPress di caricare Javascript, però. Vedi wp_enqueue_script()
per maggiori informazioni.

Ciao @PatJ, sono d'accordo, per caricare una libreria JS esterna o un file JS con tutte le tue funzioni Javascript, allora sì assolutamente quello sarebbe il modo corretto. Tuttavia, se stai caricando uno snippet di Javascript, non ha senso creare un intero nuovo file JS e aggiungere una richiesta HTTP aggiuntiva solo per quello. Prendi Google Analytics come esempio, nel 99% dei temi o build personalizzati, il JS verrà aggiunto nell'header o nel footer tramite opzioni del tema o file functions. È una pratica comune includere snippet di JS o anche CSS in questo modo.

"Pratica comune" non lo rende corretto, però. La wp_enqueue_script()
docs afferma chiaramente Questo è il metodo raccomandato per collegare JavaScript a una pagina generata da WordPress.

Se prendi il tema predefinito di WordPress twentyfourteen, carica html5.js nell'header.php. Certo, lo fa in questo modo per un motivo, ovvero per verificare se il browser soddisfa la condizione di essere IE < 9, ma il mio punto è che, sebbene l'enqueuing sia il metodo raccomandato e preferito, a seconda di tutte le altre variabili/circostanze legate a ciò che stai cercando di ottenere, potrebbe non sempre essere il più pratico e penso che si debba usare un po' di discrezione. Senti, potrei anche sbagliarmi completamente in questa visione, sono interessato a sentire cosa hanno da dire alcuni dei ragazzi davvero esperti :-)

Grazie per il tuo ottimo suggerimento. Non riesco a farlo funzionare però; se aggiungo il tuo codice all'interno del tag <?php del mio functions.php ottengo un 'Parse error: syntax error, unexpected '<' in /somepath.../functions.php on line 1146'. Se lo aggiungo fuori dal <?php, sembra semplicemente echoare il codice dato in cima alla pagina. Cosa mi sfugge?

Quando lo incolli nel tuo file functions.php - rimuovi il primo <?php
dal codice che ho fornito, dato che hai già il tag di apertura <?php
alla riga 1 del tuo file functions.php. Ho modificato la mia risposta originale e l'ho rimosso anche da lì.

Poiché la risposta è già stata accettata, vorrei solo segnalare un altro modo per accodare il codice JavaScript nel footer che ho utilizzato diverse volte.
Nel file 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' );
Puoi caricare questo script solo su un particolare template di pagina utilizzando una condizione
if( is_page_template( 'page-template.php' ) ):
//inserisci il codice sopra (o solo la parte add_action) all'interno di questa condizione per caricare il file solo se la condizione è vera
endif;
Se il file page-template.php si trova in una directory (ad esempio la directory templates nella root del tuo tema) puoi scrivere:
is_page_template( 'templates/page-template.php' );

Non consiglierei di "inserire" il JavaScript nel footer in questo modo. Ciò impedisce che possa essere disattivato o modificato (almeno facilmente), cosa estremamente importante nello sviluppo di plugin e temi. Se sei l'utente finale di un sito e hai bisogno di uno script rapido o qualcosa di simile, puoi farlo - ma anche in questo caso wp_enqueue_script()
è quasi sempre universalmente migliore e più flessibile.

Per rispondere alla domanda dobbiamo prima fare una distinzione tra javascript e JQuery.
Per esprimerlo in modo semplice:
- Javascript è basato su ECMAScript
- JQuery è una libreria per Javascript
Quindi in realtà stai ponendo due domande diverse:
- Il tuo titolo parla di una soluzione per implementare javascript
- La tua domanda parla di una soluzione per implementare JQuery
Poiché i risultati di Google mostrano il tuo titolo e tutto il contenuto della pagina parla di JQuery, questo può diventare molto frustrante per le persone che cercano una soluzione javascript.
E ora la soluzione per JQuery:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);
E la soluzione per javascript:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );
Questo codice può essere aggiunto al tuo functions.php
La posizione degli script in entrambi i casi è wp-content/themes/nome-tema/js/script.js
Buona programmazione!
