Cum să adaugi corect Javascript în functions.php
Aș dori să elimin săgețile standard care arată urât de pe butoanele coșului în WooCommerce. Pentru a realiza acest lucru, am găsit un sfat de a adăuga următorul cod, care ar trebui să elimine săgețile când documentul s-a încărcat.
Presupun că trebuie să-l pun în functions.php? Cum aș face asta exact?
$(document).ready(function() {
$(".woocommerce-cart").html(function(i, val) {
return val.replace(" →", "");
});
$(".woocommerce-cart").html(function(i, val) {
return val.replace("← ", "");
});
});
EDITARE
Bine. Am încercat această abordare:
Am creat un fișier numit 'removeArrows.js' și l-am plasat în folderul plugin. Acesta are același conținut ca și codul original, doar că folosește jQuery în loc de $. Apoi am adăugat următoarele în 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' );
Nu reușesc să fac codul să se afișeze corect. Această metodă nu a funcționat. Aveți sugestii pentru a face acest lucru să funcționeze?

Variabila ta $scr
din funcția wp_register_script()
este incorectă. Având în vedere că functions.php se află în interiorul pluginului tău, iar removeArrows.js este în rădăcina pluginului, variabila $scr
ar trebui să arate astfel:
plugins_url( '/removeArrows.js' , __FILE__ )
Un alt aspect important este că este întotdeauna o bună practică să încarci scripturile și stilurile ultimele. Acest lucru asigură că nu vor fi suprascrise de alte scripturi și stiluri. Pentru a face acest lucru, adaugă o prioritate foarte mică (un număr foarte mare) parametrului de prioritate ($priority
) al funcției add_action
.
add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 );
Și întotdeauna încarcă/folosește scripturile și stilurile prin intermediul hook-ului de acțiune wp_enqueue_scripts
, deoarece acesta este hook-ul corect de utilizat. Nu încărca scripturile și stilurile direct în wp_head
sau wp_footer
.
EDIT
Pentru teme, după cum ai menționat că ai mutat totul în tema ta, variabila $scr
ar trebui să arate astfel:
get_template_directory_uri() . '/removeArrows.js'
pentru temele părinte și astfel:
get_stylesheet_directory_uri() . '/removeArrows.js'
pentru temele copil. Codul tău complet ar trebui să arate astfel:
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 );

Mulțumesc mult pentru sfatul excelent. Aceasta pare a fi abordarea corectă. Am o întrebare totuși; fișierul functions.php se află în folderul temei mele. Cum ar trebui să leg fișierul js dacă acesta se află în același folder, în rădăcina temei?

Ar trebui să păstrezi totul într-un plugin sau într-o temă, nu le împărți. Dacă lucrezi într-o temă, $scr
ar trebui să fie get_template_directory_uri() . '/removeArrows.js'
pentru temele părinte, și get_stylesheet_directory_uri() . '/removeArrows.js'
pentru temele copil

Am încercat din nou, de data aceasta adăugând fișierul removeArrows.js direct în folderul temei și folosind următoarele în 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 );
acest lucru îmi dă eroarea Parse error: syntax error, unexpected ',' pe linia wp_register_script.

get_template_directory_uri() . '/removeArrows.js', FILE)
ar trebui să fie doar get_template_directory_uri() . '/removeArrows.js'

Nu. Am folosit exact codul tău pe care l-ai editat la finalul postării originale. Singurul lucru pe care îl face este să înghețe pagina coșului când vizualizez conținutul. Cred că o să renunț :-) O ultimă încercare totuși; ai menționat la început că get_template_directory_uri() este pentru temele părinte, iar apoi în codul final complet ai spus că e pentru temele copil. Care este adevărul? Tema mea este una părinte :-)

Nu aș adăuga un alt fișier js extern, este doar o resursă suplimentară și inutilă de preluat și asta este ceva ce dorim să reducem în ceea ce privește timpii de încărcare a paginii.
Aș adăuga acest fragment jQuery în head-ul site-ului tău folosind hook-ul wp_head
. Ai putea lipi următoarele în fișierul functions al temei sau al plugin-ului tău. De asemenea, m-am asigurat că jQuery este în modul no-conflict, după cum poți vedea mai jos.
add_action('wp_head','woocommerce_js');
function woocommerce_js()
{ // ieșire din 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 } // revenire în php
După ce ai făcut asta și ai reîmprospătat pagina, verifică codul sursă al paginii pentru a te asigura că acest fragment jQuery este încărcat efectiv în pagina ta. Dacă este, atunci ar trebui să funcționeze, cu excepția cazului în care există ceva neînregulă în fragmentul jQuery pe care îl folosești.

Nu acesta este modul recomandat în WordPress pentru încărcarea JavaScript-ului. Vezi wp_enqueue_script()
pentru mai multe informații.

Salut @PatJ, sunt de acord, pentru încărcarea unei biblioteci JS externe sau a unui fișier JS cu toate funcțiile tale JavaScript, atunci da, acesta ar fi modul corect. Totuși, dacă încarci un fragment de JavaScript, nu are sens să creezi un întreg fișier JS nou și să adaugi o cerere HTTP suplimentară doar pentru asta. Luați ca exemplu Google Analytics, în 99% din teme sau construcții personalizate, JS-ul va fi adăugat în header sau footer prin opțiunile temei sau fișierul de funcții. Este o practică comună să incluzi fragmente de JS sau chiar CSS în acest fel.

"Practica comună" nu o face corectă, totuși. Documentația wp_enqueue_script()
afirmă chiar Acesta este metoda recomandată pentru a lega JavaScript de o pagină generată de WordPress.

Dacă luați tema implicită twentyfourteen din WordPress, aceasta încarcă html5.js în header.php. Desigur, se face asta într-un anumit scop, pentru a verifica dacă browserul îndeplinește condiția de a fi IE < 9, dar ideea mea este că, deși încărcarea prin enqueue este metoda recomandată și preferată, în funcție de toate celelalte variabile/împrejurări legate de ceea ce încercați să realizați, poate să nu fie întotdeauna cea mai practică și cred că ar trebui folosită o anumită discreție. Uite, s-ar putea să greșesc complet și în această privință, sunt interesat să aud ce au de spus cei cu experiență :-)

Mulțumesc pentru sugestia ta excelentă. Totuși, nu reușesc să o fac să funcționeze; dacă adaug codul tău în interiorul tag-ului <?php din functions.php primesc o 'Eroare de parsare: eroare de sintaxă, neașteptat '<' în /somepath.../functions.php la linia 1146'. Dacă îl adaug în afara <?php, se pare că pur și simplu afișează codul dat în partea de sus a paginii. Ce am omis aici?

Când lipiți codul în fișierul functions.php - eliminați primul <?php
din codul pe care l-am furnizat, deoarece aveți deja tag-ul de deschidere <?php
pe linia 1 din fișierul functions.php. Am editat răspunsul meu original și l-am eliminat și de acolo.

Deoarece răspunsul este deja acceptat, vreau doar să menționez că există o altă metodă de a încărca cod JavaScript în footer, pe care am folosit-o de multe ori.
În fișierul 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' );
Puteți încărca acest script doar pe anumite șabloane de pagină folosind o condiție
if( is_page_template( 'page-template.php' ) ):
//introduceți codul de mai sus (sau doar partea cu add_action) în această condiție pentru a încărca fișierul doar dacă condiția este adevărată
endif;
Dacă fișierul page-template.php se află într-un director (de exemplu, directorul templates în rădăcina temei), puteți scrie:
is_page_template( 'templates/page-template.php' );

Nu aș recomanda "incorporarea" JavaScript-ului în footer în acest fel. Acest lucru împiedică posibilitatea de a-l decupla sau modifica (cel puțin, ușor), ceea ce este extrem de important în dezvoltarea de plugin-uri și teme. Dacă sunteți utilizatorul final al unui site și aveți nevoie de un script rapid sau ceva similar, puteți încerca această metodă - dar chiar și în acest caz, wp_enqueue_script()
este aproape întotdeauna o alegere mai bună și mai flexibilă.

Pentru a răspunde la întrebare, trebuie mai întâi să facem o distincție între JavaScript și jQuery.
Pentru a o exprima într-un mod simplu:
- JavaScript este bazat pe ECMAScript
- jQuery este o bibliotecă pentru JavaScript
Deci, în realitate, pui două întrebări diferite:
- Titlul tău vorbește despre o soluție pentru implementarea JavaScript
- Întrebarea ta vorbește despre o soluție pentru implementarea jQuery
Deoarece rezultatele Google afișează titlul tău și tot conținutul paginii vorbește despre jQuery, acest lucru poate deveni foarte frustrant pentru oamenii care caută o soluție pentru JavaScript.
Și acum, soluția pentru jQuery:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);
Și soluția pentru JavaScript:
wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );
Acest cod poate fi adăugat în fișierul tău functions.php
Locația scripturilor în ambele cazuri este wp-content/themes/theme-name/js/script.js
Programare plăcută!
