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

Asta înseamnă pur și simplu că fișierele de script WooCommerce nu sunt încărcate. Aruncă o privire în /woocommerce.phpși vei vedea cum
woocommerce_frontend_scripts()este legat de hook-ul
template_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.

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?

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?

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.

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.
