Hook-ul pentru butonul AJAX Adaugă în Coș
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.
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
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
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
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
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
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