Come aggiungere correttamente Javascript in Functions.php


10

Vorrei rimuovere alcune brutte frecce dall'aspetto standard sui pulsanti del carrello in WooCommerce. Per raggiungere questo obiettivo, ho trovato un suggerimento per aggiungere il seguente codice, che dovrebbe rimuovere le frecce quando il documento è stato caricato.

Presumo che lo inserirò nel mio function.php? Come lo farei esattamente?

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

MODIFICARE

Va bene. Ho provato questo approccio:

Crea un file chiamato 'removeArrows.js' e lo inserisce nella mia cartella plugin. Questo ha lo stesso contenuto del codice originale, tranne jQuery anziché $. Quindi 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 visualizzare correttamente il codice. Questo non ha funzionato. Qualche suggerimento per farlo funzionare?

Sorgente frammento jQuery


È pazzesco: non riesci a modificare le frecce nel codice che le genera? (O è scaricato da una fonte esterna?) In ogni caso puoi fare entrambe le sostituzioni in un'unica funzione per evitare di leggere e scrivere due volte tutto l'HTML all'interno del blocco del carrello. Non conosco un modo per iniettarlo direttamente nella pagina da Functions.php ma puoi salvarlo in un file di script separato (se non ne hai già uno puoi aggiungerlo a) e poi wp-enqueue-script. Dovrai anche cambiare la $s in jQuery(vedi quella sezione 7)
Rup

No, sono abbastanza sicuro che non possa essere rimosso prima dell'inserimento. Se è possibile, non sono stato in grado di trovare un modo per farlo. Un buon punto per aggiungerlo in una singola funzione. Sembrerebbe così? $ (document) .ready (function () {$ (". woocommerce-cart"). html (function (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Esaminerò la sceneggiatura enqueue. Sembra un po 'complicato, però .. Grazie!
user2806026

Va bene. Ho provato questo approccio; Crea un file chiamato 'removeArrows.js' e lo inserisce nella mia cartella plugin. Questo ha lo stesso contenuto del codice originale, tranne jQuery anziché $. 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'); (Mi dispiace, non riesco a capire come visualizzare correttamente il codice) Questo non ha funzionato. Potete aiutarmi a risolverlo?
user2806026

1
Si prega di presentare una modifica e aggiungere tutte le informazioni pertinenti direttamente alla domanda Non utilizzare la sezione dei commenti per aggiungere il codice
Pieter Goosen,

Risposte:


10

Il tuo $scrnella tua wp_register_script()funzione è sbagliato. Dato che funziona.php nel tuo plugin e che removeArrows.js si trova nella radice del tuo plugin, $scrdovresti apparire così

plugins_url( '/removeArrows.js' , __FILE__ )

Un altro punto da notare, è sempre buona norma caricare gli script e gli stili per ultimi. Ciò assicurerà che non venga superato da altri script e stili. Per fare ciò, basta aggiungere una priorità molto bassa (numero molto alto) al parametro di priorità ( $priority) di add_action.

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

E sempre di carico / scripts di accodamento e stili tramite il wp_enqueue_scriptsgancio di azione, in quanto questo è il gancio giusto per l'uso. Non caricare script e stili direttamente su wp_headowp_footer

MODIFICARE

Per i temi, come hai indicato che ora hai spostato tutto sul tema, il tuo $scrcambierà in questo

 get_template_directory_uri() . '/removeArrows.js'

per i temi principali e questo

get_stylesheet_directory_uri() . '/removeArrows.js'

per temi per bambini. Il tuo codice completo dovrebbe apparire 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. Questo sembra l'approccio da usare. Una domanda però; funzioni.php è nella mia cartella dei temi. Come collegherei il file js se si trova nella stessa cartella radice del tema?
user2806026

Dovresti tenere tutto in un plugin o in un tema, non dividerli. Se hai un tema, lo $scrfaresti get_template_directory_uri() . '/removeArrows.js'per i temi dei genitori e get_templatestylesheet_directory_uri() . '/removeArrows.js'per i temi dei bambini
Pieter Goosen,

Riprovato, questa volta aggiungendo removeArrows.js direttamente nella cartella del tema e usando quanto segue in Functions.php; funzione wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), array ('jquery'), '1.1', vero); wp_enqueue_script ( 'my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); questo mi dà un errore di analisi: errore di sintassi, imprevisto ',' sulla riga wp_register_script.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)dovrebbe essere sologet_template_directory_uri() . '/removeArrows.js'
Pieter Goosen il

No. Ho usato il codice completamente modificato nella parte inferiore del post originale. L'unica cosa che fa è bloccare la pagina del carrello durante la visualizzazione dei contenuti. Penso che mi arrenderò :-) Un'ultima risorsa però; hai iniziato menzionando che get_template_directory_uri () è per i temi principali, quindi nel codice completo finale è per i temi secondari. Cos'è questo? Il mio tema è un genitore :-)
user2806026

4

Non aggiungerei un altro file js esterno, è solo una risorsa extra e non necessaria da recuperare ed è qualcosa che vogliamo ridurre in termini di tempi di caricamento della pagina.

Vorrei aggiungere questo frammento jQuery nella testa del tuo sito Web utilizzando il wp_headgancio. Dovresti incollare quanto segue nel tuo file delle funzioni del tema o dei plugin. Mi sono anche assicurato che jQuery sia in modalità senza conflitti, come puoi vedere di seguito.

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 volta che hai fatto questo e aggiornato la tua pagina, controlla l'origine della pagina per assicurarti che questo frammento jQuery sia effettivamente caricato nella tua pagina. In tal caso, dovrebbe funzionare a meno che non sia presente nello snippet jQuery in uso.


Questo non è il modo WordPress per caricare Javascript, però. Vedi wp_enqueue_script()per maggiori informazioni.
Pat J,

2
Ciao @PatJ, sono d'accordo, per caricare una libreria JS esterna o un file JS con tutte le tue funzioni Javascript in esso, quindi sì assolutamente sarebbe il modo corretto. Tuttavia, se stai caricando uno snippet di Javascript, non ha senso creare un file JS completamente nuovo e aggiungere una richiesta HTTP aggiuntiva solo per quello. Prendiamo ad esempio Google Analytics, nel 99% dei temi o delle build personalizzate, il JS verrà aggiunto nell'intestazione o nel piè di pagina tramite le opzioni del tema o il file delle funzioni. È prassi comune includere in questo modo i frammenti JS o CSS.
Matt Royal,

1
La "pratica comune" non lo rende corretto, però. Lo stato persino dei wp_enqueue_script()documenti Questo è il metodo raccomandato per collegare JavaScript a una pagina generata da WordPress .
Pat J,

Se prendi il tema predefinito di ventiquindici WordPress, carica html5.js nell'intestazione.php. Ha concesso la sua azione in questo modo per un motivo in modo che il controllo del browser soddisfi la condizione di essere IE <9, ma il mio punto è che comprensibilmente, l'accodamento è il metodo consigliato e preferito ma a seconda di tutte le altre variabili / circostanze che circondano ciò che si stanno provando a raggiungerlo, potrebbe non essere sempre il più pratico e penso che dovrebbe essere usata una certa discrezione. Senti, potrei anche sbagliarmi completamente in questa visione, sono interessato a sapere cosa hanno da dire alcuni dei ragazzi più esperti :-)
Matt Royal,

Grazie per il tuo grande suggerimento. Non riesco però a farlo funzionare; se aggiungo il tuo codice all'interno del tag <? php delle mie funzioni. Se lo aggiungo al di fuori di <? Php, sembra semplicemente fare eco al codice indicato nella parte superiore della pagina. Cosa mi sto perdendo qui?
user2806026

0

Dato che la risposta è già stata accettata, voglio solo dire che c'è un altro modo per accodare il codice javascript nel piè di pagina che ho fatto molte 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 in un determinato modello di pagina solo usando condition

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 page-template.php è nella directory (ad esempio directory dei template nella directory principale del tuo tema) puoi scrivere come:

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

Non consiglierei di "infornare" il JavaScript nel piè di pagina in questo modo. Impedisce che sia inattaccabile o modificabile (almeno, facilmente) che è estremamente importante nello sviluppo di plugin e temi. Se sei l'utente finale di un sito e hai bisogno di uno script veloce o qualcosa del genere, provalo, ma wp_enqueue_script()è ancora quasi sempre universalmente migliore e più flessibile.
Xhynk,

-1

Per rispondere alla domanda dobbiamo prima fare una distinzione tra javascript e JQuery.

Per dirlo in modo semplice:

  • Javascript si basa su ECMAScript
  • JQuery è una libreria per Javascript

Quindi in realtà fai due domande diverse:

  • Il tuo titolo parla di una soluzione per l'implementazione di JavaScript
  • La tua domanda parla di una soluzione per l'implementazione di 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 per la soluzione JQuery:

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

E la soluzione javascript:

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

Questo codice può essere aggiunto alle tue funzioni.php La posizione degli script in entrambi i casi è wp-content/themes/theme-name/js/script.js

Buona programmazione!


Intorno al momento in cui OP ha pubblicato, gli sviluppatori hanno usato jquery e javascript in modo intercambiabile. Non è affatto preciso, ma era quanto era popolare jquery e quanto javascript mancasse di funzionalità.
Rocky Kev,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.