Hook-ul pentru butonul AJAX Adaugă în Coș

20 iun. 2012, 00:14:54
Vizualizări: 32.4K
Voturi: 6

A avut cineva nevoie vreodată să adauge butonul AJAX pentru adăugare în coș (cel care se află în arhiva de produse) într-o afișare personalizată a unei interogări de postări?

Puteți să împărtășiți hook-ul? Nu reușesc să găsesc pe cel corect.

2
Comentarii

Ai luat în considerare să întrebi asta pe forumurile de suport WooCommerce?

EAMann EAMann
20 iun. 2012 00:16:30

Da, dar din experiența mea, StackExchange este întotdeauna mai rapid.

Anriëtte Myburgh Anriëtte Myburgh
20 iun. 2012 00:17:11
Toate răspunsurile la întrebare 1
8

Cercetând codul, este destul de simplu de găsit.

În primul rând, uită-te la șablonul folosit pentru arhivele de produse - /templates/archive-product.php. Printre altele, acesta configurează interogările obișnuite și începe construirea marcajului paginii.

Dar când începe să parcurgă fiecare produs, delegă munca către /templates/loop-shop.php. Acest șablon este încărcat pentru fiecare produs și construiește o listă folosind următorul cod:

<?php do_action('woocommerce_before_shop_loop_item'); ?>
        
<a href="<?php the_permalink(); ?>">
            
    <?php do_action('woocommerce_before_shop_loop_item_title', $post, $_product); ?>
            
    <h3><?php the_title(); ?></h3>
            
    <?php do_action('woocommerce_after_shop_loop_item_title', $post, $_product); ?>
        
</a>

<?php do_action('woocommerce_after_shop_loop_item', $post, $_product); ?>

Partea care ne interesează este ultima acțiune: woocommerce_after_shop_loop_item. Aceasta este conectată în /woocommerce_template_actions.php la funcția woocommerce_template_loop_add_to_cart().

Investigând și mai profund, se pare că această funcție este cea de care ai nevoie.

Cum să o Adaugi

Cea mai ușoară metodă de a folosi această funcție este să o apelezi direct. Doar ține cont că necesită doi parametri, $post și $_product. Următorul cod ar apela funcția corect:

global $post; // Presupunând că este deja configurat
$_product = &new woocommerce_product( $post->ID );

woocommerce_template_loop_add_to_cart( $post, $_product );

Funcția în sine apelează propriile sale echo-uri, așa că doar apeleaz-o direct.

20 iun. 2012 01:57:39
Comentarii

Oh, minunat! O să încerc.

Anriëtte Myburgh Anriëtte Myburgh
20 iun. 2012 21:54:30

Aceasta afișează exact ce am nevoie, doar că se pare că butonul trebuie să fie legat de un JS, pentru că acum, când dau click pe el, încarcă produsul fără să îl adauge în coș, chiar dacă linkul arată așa: {url}/?add-to-cart=9686

Anriëtte Myburgh Anriëtte Myburgh
20 iun. 2012 22:06:41

Asta înseamnă pur și simplu că fișierele de script WooCommerce nu sunt încărcate. Aruncă o privire în /woocommerce.phpși vei vedea cumwoocommerce_frontend_scripts()este legat de hook-ultemplate_redirect`. Va trebui fie să conectați acest lucru în propriul cod, fie să încărcați manual scripturile de front-end de care aveți nevoie.

EAMann EAMann
20 iun. 2012 22:11:47

Văd că încarcă fișierul implicit woocommerce.min.js și fișierele aferente, dar butonul nu este prins de handler-ul live('click'). Aveți vreo sugestie?

Anriëtte Myburgh Anriëtte Myburgh
20 iun. 2012 23:48:38

Fără să vă văd site-ul, pot oferi doar o anumită cantitate de sfaturi. Handler-ul de click este încapsulat într-o altă verificare: if (woocommerce_params.option_ajax_add_to_cart=='yes') { - codul trece de această verificare?

EAMann EAMann
20 iun. 2012 23:56:25

Bună, am verificat asta și am avansat, acum se pare că $.post() nu primește deloc răspuns. Se pare că admin-ajax.php nu returnează nimic.

Anriëtte Myburgh Anriëtte Myburgh
22 iun. 2012 14:36:13

Asta înseamnă că hook-urile AJAX nu sunt adăugate. add_action('wp_ajax_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart'); și add_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart');. Din păcate, fără a avea acces direct la site-ul tău, nu putem face mult mai multe pentru a ajuta. Va trebui să angajezi un developer să verifice sau poți contacta direct echipa WooCommerce.

EAMann EAMann
22 iun. 2012 16:38:16

Este chiar stupid, dar se pare că tema pe care o folosesc avea un handler jQuery click() care întrerupea cererea AJAX. Am schimbat-o astfel încât să nu se mai execute când se face click pe .add_to_cart_button, ci doar pentru celelalte elemente.

Anriëtte Myburgh Anriëtte Myburgh
28 iun. 2012 23:24:53
Arată celelalte 3 comentarii