¿El hook para el botón AJAX de Añadir al Carrito?

20 jun 2012, 00:14:54
Vistas: 32.4K
Votos: 6

¿Alguien ha tenido la necesidad de agregar el botón AJAX de añadir al carrito (el que se encuentra en los archivos de productos) en una salida de consulta personalizada de productos?

¿Podrían compartir el hook? No logro encontrar el correcto.

2
Comentarios

¿Has considerado preguntar esto en los foros de soporte de WooCommerce?

EAMann EAMann
20 jun 2012 00:16:30

Sí, pero mi experiencia es que StackExchange siempre es más rápido.

Anriëtte Myburgh Anriëtte Myburgh
20 jun 2012 00:17:11
Todas las respuestas a la pregunta 1
8

Analizando el código, es bastante sencillo de encontrar.

Primero, mira la plantilla utilizada para los archivos de productos - /templates/archive-product.php. Entre otras cosas, configura las consultas regulares y comienza a construir el marcado de la página.

Pero cuando realmente comienza a iterar a través de cada producto, delega el trabajo a /templates/loop-shop.php. Esta plantilla se carga para cada producto y construye un listado utilizando el siguiente código:

<?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 parte que nos interesa es la última acción: woocommerce_after_shop_loop_item. Está conectada en /woocommerce_template_actions.php a la función woocommerce_template_loop_add_to_cart().

Profundizando aún más, parece que esta función es la que necesitas.

Cómo Añadirla

La forma más fácil de usar esta función es llamarla directamente. Solo ten en cuenta que requiere dos parámetros, $post y $_product. El siguiente código la llamaría correctamente:

global $post; // Asumiendo que ya está configurado
$_product = &new woocommerce_product( $post->ID );

woocommerce_template_loop_add_to_cart( $post, $_product );

La función misma llama a sus propios echo, así que simplemente llámala directamente.

20 jun 2012 01:57:39
Comentarios

¡Oh, genial! Lo voy a probar.

Anriëtte Myburgh Anriëtte Myburgh
20 jun 2012 21:54:30

Esto muestra exactamente lo que necesito, excepto que parece que el botón debe estar vinculado a algún JS, porque ahora, cuando hago clic, carga el producto sin añadirlo al carrito aunque el enlace luce así: {url}/?add-to-cart=9686

Anriëtte Myburgh Anriëtte Myburgh
20 jun 2012 22:06:41

Eso simplemente significa que los archivos de scripts de WooCommerce no están siendo encolados. Mira en /woocommerce.phpy verás cómowoocommerce_frontend_scripts()está vinculado al hooktemplate_redirect`. Necesitarás enlazar esto a tu propio código o cargar manualmente los scripts específicos del front-end que necesites.

EAMann EAMann
20 jun 2012 22:11:47

Puedo ver que está cargando los archivos predeterminados woocommerce.min.js y relacionados, pero el botón no es capturado por el manejador live('click'). ¿Algún consejo?

Anriëtte Myburgh Anriëtte Myburgh
20 jun 2012 23:48:38

Sin ver tu sitio, solo puedo dar consejos limitados. El manejador de clic está envuelto en otra verificación: if (woocommerce_params.option_ajax_add_to_cart=='yes') { ¿El código está pasando este punto?

EAMann EAMann
20 jun 2012 23:56:25

Hola, verifiqué eso y he avanzado un poco más. Ahora parece que $.post() no recibe ninguna respuesta. Parece que admin-ajax.php no devuelve nada.

Anriëtte Myburgh Anriëtte Myburgh
22 jun 2012 14:36:13

Eso significa que los hooks AJAX no se están agregando. add_action('wp_ajax_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart'); y add_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart');. Desafortunadamente, sin tener acceso directo a tu sitio, no hay mucho más que podamos hacer para ayudar. Necesitarás contratar a un desarrollador para que lo revise, o quizás contactar directamente al equipo de WooCommerce.

EAMann EAMann
22 jun 2012 16:38:16

Esto es realmente tonto, pero resulta que el tema que estoy usando tenía un manejador jQuery click() que estaba interrumpiendo la solicitud AJAX. Lo he modificado para que no se active cuando se hace clic en .add_to_cart_button, solo para todo lo demás.

Anriëtte Myburgh Anriëtte Myburgh
28 jun 2012 23:24:53
Mostrar los 3 comentarios restantes