Aplică script jquery doar pe paginile și categoriile de produse WooCommerce
Am acest script care derulează automat pagina până la conținutul principal la încărcarea paginii.
jQuery(document).ready(function($){
if ( $(window).width() < 768 || window.Touch) {
$('html, body').animate({ scrollTop: $("#primary").offset().top}, 2000);}
});
1. Totuși, aș dori să îl aplic doar pe paginile și categoriile de produse WooCommerce, astfel încât să nu funcționeze pe pagina principală/paginile de blog. Cum aș putea face asta?
Pot face acest lucru în mod necorespunzător editând fișierele core ale WooCommerce, dar știu că e o idee teribilă, așa că caut ajutor pentru a face acest lucru corect prin intermediul fișierului functions.php.
2. De asemenea, aș dori să știu cum să îl aplic pe toate paginile cu excepția paginii principale, în cazul în care aceasta ar fi o opțiune mai bună mai târziu.
Mulțumesc mult!
Există două modalități prin care poți realiza acest lucru.
1. Folosind doar JavaScript
Temele WordPress folosesc în mod normal funcția body_class(). Ca urmare, vei observa că tag-ul <body> va avea multe clase. Poți apoi să ții în evidență paginile cu o anumită clasă pentru a rula codul tău în JavaScript:
if( $('body.whateverclass').length || $('body.anotherclass').length ){
// Codul tău JS aici
}
2. Folosind PHP
Poți utiliza wp_localize_script() pentru a trimite un indicator către codul tău.
Să presupunem că ai încărcat un fișier numit site.js cu un nume de handle site, în functions.php vei avea:
wp_register_script( 'site', 'path/to/site.js' );
wp_enqueue_script( 'site' );
Acum poți adăuga câțiva indicatori:
wp_register_script( 'site', 'path/to/site.js' ); # Nemodificat
$value = '';
if ( is_shop() || is_some_other_condition() ){
$value = 'yes';
}
wp_localize_script( 'site', 'MYSITE', $value );
wp_enqueue_script( 'site' ); # Nemodificat
Poți apoi verifica variabila MYSITE în JavaScript:
if( 'yes' === MYSITE ){
// Codul tău JS aici
}
Editare: Ai întrebat cum să-l pui în footer.php:
<script>
jQuery(document).ready(function($){
if( $('body.product-template-default').length || $('body.anotherclass').length ){
if ( $(window).width() < 768 || window.Touch) {
$('html, body').animate({ scrollTop: $("#primary").offset().top}, 2000);
}
}
});
</script>
Dacă folosesc JavaScript... Cum ar arăta exact asta? Am pus acest cod în partea de jos a fișierului meu footer.php și nu reușesc să-l fac să funcționeze. (funcționează fără instrucțiunea if)
<script> if( $('body.product-template-default').length || $('body.anotherclass').length ){ jQuery(document).ready(function($){ if ( $(window).width() < 768 || window.Touch) { $('html, body').animate({ scrollTop: $("#primary").offset().top}, 2000); } }); } </script>
Patrick
@PortalP Am actualizat răspunsul meu cu codul tău. Partea jQuery(document).... ar trebui să fie cea mai exterioară.
RRikesh
Mulțumesc! Totuși, din nu știu ce motiv, nu reușesc să-l fac să funcționeze. :(
Patrick
Nu-i nimic, am reușit să funcționeze! :) MULȚUMESC! Asta va fi atât de util în atâtea situații.
Patrick
Scriptul meu pentru lățimea ecranului nu funcționează. Ar trebui să funcționeze doar pe lățimi mai mici de 768px sau mai puțin. Este în regulă să pun o instrucțiune if în interiorul alteia? Nu ar trebui combinate într-o singură instrucțiune if?
Mulțumesc!
Patrick
Nu e nicio problemă să pui un if în interiorul altuia. Care este scopul scriptului tău? Din ce pot citi, ar trebui să deruleze la elementul #primary de fiecare dată când încarci pagina în timp ce lățimea ecranului este mai mică de 768.
RRikesh
Din păcate, nu sunt disponibil pentru sesiuni private de depanare gratuite :) Elimină || window.Touch și încearcă din nou. Sau poți încerca StackOverflow pentru probleme care nu sunt legate de WordPress.
RRikesh
@RRikesh care este diferența dintre site și some_handle? M-aș gândi că după înregistrarea site, acum îl punem în coadă.. dar se pare că altceva a fost pus în coadă
Malcolm Salvador
Pasul 1: salvează codul ca un nou fișier js, de exemplu main.js
Pasul 2: adaugă o funcție condițională în fișierul function.php al temei tale care ar trebui să conțină ceva de genul:
if (is_shop() || is_product_category()) {
wp_enqueue_script('main', get_template_directory_uri() . '/js/main.js', false, false, true);
}
Verifică această pagină pentru tag-uri condiționale în funcție de nevoile tale:
https://docs.woocommerce.com/document/conditional-tags/
Sper că te ajută!
Edit:
Pentru scripting inline ai putea face (de exemplu în footer.php):
if (is_shop() || is_product_category()) {?>
<script>
jQuery(document).ready(function($){
if ( $(window).width() < 768 || window.Touch) {
$('html, body').animate({ scrollTop: $("#primary").offset().top}, 2000);
}
});
</script>
<?php}
Mulțumesc! Dar cum pot adăuga scriptul inline? Mi se pare inutil să fac o altă apelare către un fișier de script când scriptul în sine (furnizat mai sus) este mic.
Patrick
Presupun că ai putea folosi exact aceeași instrucțiune IF în footer.php dar în loc să încarci scriptul, ai putea scrie scriptul tău între tag-urile <script>, dar nu recomand acest lucru, mai ales pentru scripturile jQuery.
Dragos Micu
De ce nu? De asemenea, poți actualiza acel răspuns cu un fragment de cod exemplu?
Patrick