Cum să adaugi corect Javascript în functions.php

25 iun. 2014, 21:30:03
Vizualizări: 148K
Voturi: 17

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?

Sursa codului jQuery

4
Comentarii

E nebunie: nu poți să editezi săgețile direct în codul care le generează? (Sau sunt descărcate dintr-o sursă externă?) În orice caz, poți face ambele înlocuiri într-o singură funcție pentru a evita citirea și scrierea întregului HTML din blocul coșului de două ori. Nu știu o metodă de a injecta asta direct în pagină din functions.php, dar poți să salvezi într-un fișier script separat (dacă nu ai deja unul, îl poți adăuga) și apoi să-l wp-enqueue-script. Va trebui de asemenea să schimbi $ în jQuery (vezi secțiunea 7 din acea pagină)

Rup Rup
25 iun. 2014 21:46:08

Nu, sunt destul de sigur că nu poate fi eliminat înainte de inserare. Dacă se poate, nu am reușit să găsesc o metodă.

Bună observație despre adăugarea într-o singură funcție. Ar arăta așa?

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

Voi cerceta enqueue script. Pare puțin complicat, totuși.. Mulțumesc!

user2806026 user2806026
25 iun. 2014 23:18:30

Bine. Am încercat această abordare;

Am creat un fișier numit 'removeArrows.js' și l-am plasat în folderul pluginului meu. Acesta are același conținut ca 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' );

(Scuze, nu reușesc să fac codul să se afișeze corect)

Asta nu a funcționat. Poți să mă ajuți să-l repar?

user2806026 user2806026
25 iun. 2014 23:32:34

Te rog să completezi o [editare] și să adaugi toate informațiile relevante direct în întrebarea ta. Nu folosi secțiunea de comentarii pentru a adăuga cod

Pieter Goosen Pieter Goosen
26 iun. 2014 14:52:08
Toate răspunsurile la întrebare 4
6
13

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 ); 
26 iun. 2014 15:47:32
Comentarii

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?

user2806026 user2806026
26 iun. 2014 17:41:22

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

Pieter Goosen Pieter Goosen
26 iun. 2014 17:44:46

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.

user2806026 user2806026
26 iun. 2014 18:07:51

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

Pieter Goosen Pieter Goosen
26 iun. 2014 18:10:41

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

user2806026 user2806026
27 iun. 2014 15:41:57

Scuze, a fost o eroare de copiere și lipire acolo. Ultima bucată de cod complet este pentru temele părinte. Dacă nu funcționează, va trebui să verifici scriptul tău

Pieter Goosen Pieter Goosen
27 iun. 2014 16:31:59
Arată celelalte 1 comentarii
7

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.

26 iun. 2014 00:06:15
Comentarii

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

Pat J Pat J
26 iun. 2014 00:24:23

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.

Matt Royal Matt Royal
26 iun. 2014 00:33:11

"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.

Pat J Pat J
26 iun. 2014 03:04:37

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ță :-)

Matt Royal Matt Royal
26 iun. 2014 09:30:07

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?

user2806026 user2806026
26 iun. 2014 13:23:52

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.

Matt Royal Matt Royal
26 iun. 2014 14:38:00

Acest cod JS trebuie să fie încadrat în <script></script>. Această metodă de a afișa JS în WP nu este recomandată, dar în unele cazuri soluțiile rapide sunt mai importante decât cele mai bune practici.

Tahi Reu Tahi Reu
9 ian. 2020 16:13:14
Arată celelalte 2 comentarii
1

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' );
24 aug. 2018 17:31:38
Comentarii

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ă.

Xhynk Xhynk
24 aug. 2018 19:33:34
1
-1

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ă!

24 aug. 2018 14:24:26
Comentarii

În perioada în care OP a postat, dezvoltatorii foloseau jQuery și JavaScript interschimbabil. Nu este deloc corect, dar asta arăta cât de popular era jQuery și câte funcționalități lipsau în JavaScript la acea vreme.

Rocky Kev Rocky Kev
29 apr. 2020 19:01:00