Woocommerce mostra prodotti cross-sells nella pagina del singolo prodotto
22 giu 2017, 14:32:48
Visualizzazioni: 20K
Voti: 7
Sto cercando di mostrare i cross-sells nella pagina del singolo prodotto invece che nel carrello:
Finora ho provato il seguente codice:
<?php do_action( 'woocommerce_after_single_product_summary_data_tabs' ); ?>
<?php if ( $product->get_upsell_ids() ) : ?>
<div class="single_product_summary_upsell">
<?php do_action( 'woocommerce_after_single_product_summary_upsell_display' ); ?>
</div><!-- .single_product_summary_upsells -->
<?php endif; ?>
<?php if ( $product->get_cross_sell_ids() ) : ?>
<div class="single_product_summary_upsell">
<?php do_action( 'woocommerce_after_single_product_summary_upsell_display' ); ?>
</div><!-- .single_product_summary_upsells -->
<?php endif; ?>
<div class="single_product_summary_related">
<?php do_action( 'woocommerce_after_single_product_summary_related_products' ); ?>
</div><!-- .single_product_summary_related -->
</div><!-- .columns -->
Tuttavia questo mostrerà solo gli upsells sotto gli upsells, quindi è semplicemente lo stesso contenuto ripetuto due volte. Non sono sicuro su quale action usare invece di
do_action( 'woocommerce_after_single_product_summary_upsell_display' ); ?>

Alex Gogl
171
Tutte le risposte alla domanda
2
2
// Aggiunge una sezione di prodotti cross-sell dopo il riepilogo del prodotto singolo
add_action('woocommerce_after_single_product_summary', 'mostra_prodotti_cross_sell_nel_prodotto_singolo', 30);
function mostra_prodotti_cross_sell_nel_prodotto_singolo(){
// Recupera gli ID dei prodotti cross-sell
$crosssells = get_post_meta( get_the_ID(), '_crosssell_ids',true);
// Se non ci sono prodotti cross-sell, esci dalla funzione
if(empty($crosssells)){
return;
}
// Configura i parametri per la query
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'post__in' => $crosssells
);
// Esegui la query
$products = new WP_Query( $args );
// Se ci sono prodotti da mostrare
if( $products->have_posts() ) :
// Mostra l'intestazione della sezione
echo '<div class="cross-sells"><h2>Prodotti Correlati</h2>';
// Avvia il loop di WooCommerce
woocommerce_product_loop_start();
// Loop attraverso i prodotti
while ( $products->have_posts() ) : $products->the_post();
// Mostra il template del prodotto
wc_get_template_part( 'content', 'product' );
endwhile; // fine del loop
// Chiudi il loop di WooCommerce
woocommerce_product_loop_end();
echo '</div>';
endif;
// Ripristina i dati del post originale
wp_reset_postdata();
}

itzmekhokan
241
23 giu 2017 09:25:23
Commenti
Questo codice ha del potenziale, mi piace molto di più rispetto alla personalizzazione di un tema. Devo solo apportare alcune modifiche agli stili e dovrebbe funzionare. C'è un modo per evitare dichiarazioni assolute di classi? Senza la parte <div class="..."></div>?

24 giu 2017 13:07:27
1
trova questo codice e rimuovilo
1: ottieni gli ID dei prodotti cross sell utilizzando la meta key '_crosssell_ids'.
<?php
/* crossells */
$crosssell_ids = get_post_meta( get_the_ID(), '_crosssell_ids' );
$crosssell_ids=$crosssell_ids[0];
?>
- Cicla attraverso i prodotti per ID
if(count($crosssell_ids)>0){
$args = array( 'post_type' => 'product', 'posts_per_page' => 10, 'post__in' => $crosssell_ids );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?><a href='<?php the_permalink(); ?>'><?php
the_post_thumbnail( 'thumbnail' );
the_title();
?></a><?php
endwhile;
}

Alpesh Rathod
111
22 giu 2017 14:45:10
Domande correlate
8
risposte
3
risposte
1
risposte