web-dev-qa-db-fra.com

Le crochet pour le AJAX Bouton Ajouter au panier?

Quelqu'un ici a-t-il déjà eu besoin d'ajouter le bouton AJAX ajouter au panier (celui situé dans les archives du produit) dans une sortie de requête personnalisée?

Ça vous dérange de partager le crochet? Je n'arrive pas à trouver le bon.

4
Anriëtte Myburgh

En fouillant dans le code, c'est assez simple à trouver.

Premièrement, regardez le modèle utilisé pour les archives de produits - /templates/archive-product.php. Entre autres choses, il configure les requêtes habituelles et commence à construire le balisage de la page.

Mais lorsqu'il commence réellement à parcourir en boucle chaque produit, il délègue le travail à /templates/loop-shop.php. Ce modèle est chargé pour chaque produit et construit une liste à l'aide du code suivant:

<?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); ?>

La partie qui nous importe est la dernière action: woocommerce_after_shop_loop_item. Il est connecté dans /woocommerce_template_actions.php à la fonction woocommerce_template_loop_add_to_cart().

Si vous creusez encore plus profondément, il semble que cette fonction est celle qu'il vous faut.

Comment l'ajouter

Le moyen le plus simple d'utiliser cette fonction est de l'appeler directement. Sachez simplement que cela nécessite de paramétrer, $post et $_product. Le code suivant l'appellerait très bien:

global $post; // Assuming it's already set up
$_product = &new woocommerce_product( $post->ID );

woocommerce_template_loop_add_to_cart( $post, $_product );

La fonction elle-même appelle sa propre echos, appelez-la donc directement.

5
EAMann