Aplică script jquery doar pe paginile și categoriile de produse WooCommerce

14 mar. 2017, 12:50:49
Vizualizări: 19.8K
Voturi: 3

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!

0
Toate răspunsurile la întrebare 2
9

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> 
14 mar. 2017 14:09:29
Comentarii

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 Patrick
14 mar. 2017 14:16:51

@PortalP Am actualizat răspunsul meu cu codul tău. Partea jQuery(document).... ar trebui să fie cea mai exterioară.

RRikesh RRikesh
14 mar. 2017 14:23:33

Mulțumesc! Totuși, din nu știu ce motiv, nu reușesc să-l fac să funcționeze. :(

Patrick Patrick
14 mar. 2017 14:28:55

Nu-i nimic, am reușit să funcționeze! :) MULȚUMESC! Asta va fi atât de util în atâtea situații.

Patrick Patrick
14 mar. 2017 14:33:07

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 Patrick
14 mar. 2017 14:41:27

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 RRikesh
14 mar. 2017 15:02:43

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
14 mar. 2017 15:07:41

@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 Malcolm Salvador
11 feb. 2020 22:30:39

@MalcolmSalvador Cred că ai dreptate. Nu știu cum a scăpat acea greșeală de tipar.

RRikesh RRikesh
12 feb. 2020 07:13:28
Arată celelalte 4 comentarii
4

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}
14 mar. 2017 13:28:10
Comentarii

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 Patrick
14 mar. 2017 13:29:53

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 Dragos Micu
14 mar. 2017 13:52:38

De ce nu? De asemenea, poți actualiza acel răspuns cu un fragment de cod exemplu?

Patrick Patrick
14 mar. 2017 13:53:14

Am actualizat răspunsul.

Dragos Micu Dragos Micu
14 mar. 2017 14:00:15