L'hook per il pulsante AJAX Aggiungi al Carrello?

20 giu 2012, 00:14:54
Visualizzazioni: 32.4K
Voti: 6

Qualcuno ha mai avuto la necessità di aggiungere il pulsante AJAX Aggiungi al Carrello (quello presente negli archivi dei prodotti) nell'output di una query personalizzata dei post?

Potete condividere l'hook corretto? Non riesco a trovare quello giusto.

2
Commenti

Hai pensato di chiedere questo nei forum di supporto di WooCommerce?

EAMann EAMann
20 giu 2012 00:16:30

Sì, ma la mia esperienza è che StackExchange è sempre più veloce.

Anriëtte Myburgh Anriëtte Myburgh
20 giu 2012 00:17:11
Tutte le risposte alla domanda 1
8

Analizzando il codice, è abbastanza semplice da trovare.

Innanzitutto, guarda il template utilizzato per gli archivi dei prodotti - /templates/archive-product.php. Tra le altre cose, imposta le query standard e inizia a costruire il markup della pagina.

Ma quando inizia effettivamente a scorrere ogni prodotto, delega il lavoro a /templates/loop-shop.php. Questo template viene caricato per ogni prodotto e costruisce un elenco utilizzando il seguente codice:

<?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 che ci interessa è l'ultima azione: woocommerce_after_shop_loop_item. È collegata in /woocommerce_template_actions.php alla funzione woocommerce_template_loop_add_to_cart().

Scavando ancora più a fondo, sembra che questa funzione sia quella che ti serve.

Come Aggiungerla

Il modo più semplice per utilizzare questa funzione è chiamarla direttamente. Tieni presente che richiede due parametri, $post e $_product. Il seguente codice la chiamerebbe correttamente:

global $post; // Assumendo che sia già impostato
$_product = &new woocommerce_product( $post->ID );

woocommerce_template_loop_add_to_cart( $post, $_product );

La funzione stessa chiama i propri echo, quindi chiamala direttamente.

20 giu 2012 01:57:39
Commenti

Oh, fantastico! Proverò a farlo.

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

Questo restituisce esattamente ciò di cui ho bisogno, ma sembra che il pulsante debba essere collegato a qualche JS, perché ora, quando lo clicco, carica il prodotto senza aggiungerlo al carrello anche se il link appare così: {url}/?add-to-cart=9686

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

Questo significa semplicemente che i file di script di WooCommerce non sono stati accodati. Dai un'occhiata a /woocommerce.phpe vedrai comewoocommerce_frontend_scripts()è collegato all'hooktemplate_redirect`. Dovrai collegarlo al tuo codice o caricare manualmente gli script front-end specifici di cui hai bisogno.

EAMann EAMann
20 giu 2012 22:11:47

Posso vedere che sta caricando i file predefiniti woocommerce.min.js e quelli correlati, ma il pulsante non viene rilevato dal gestore live('click'). Qualche consiglio?

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

Senza vedere il tuo sito, posso darti solo alcuni consigli generali. Il gestore del click è racchiuso in un altro controllo: if (woocommerce_params.option_ajax_add_to_cart=='yes') { il codice supera questo controllo?

EAMann EAMann
20 giu 2012 23:56:25

Ciao, ho verificato e sono andato un po' più avanti, ora sembra che $.post() non riceva alcuna risposta. Sembra che admin-ajax.php non restituisca nulla.

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

Ciò significa che gli hook AJAX non vengono aggiunti. add_action('wp_ajax_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart'); e add_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'woocommerce_ajax_add_to_cart');. Sfortunatamente, senza poter lavorare direttamente sul tuo sito, non possiamo fare molto altro per aiutarti. Dovrai assumere uno sviluppatore per dare un'occhiata o contattare direttamente il team di WooCommerce.

EAMann EAMann
22 giu 2012 16:38:16

Questa è una cosa davvero stupida, ma si è scoperto che il tema che sto usando aveva un gestore jQuery click() che interrompeva la richiesta AJAX. L'ho modificato in modo che non venga inoltrato quando viene cliccato il pulsante .add_to_cart_button, ma solo per tutto il resto.

Anriëtte Myburgh Anriëtte Myburgh
28 giu 2012 23:24:53
Mostra i restanti 3 commenti