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' ); ?>
0
Tutte le risposte alla domanda 2
2
12
// 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();
}
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>?

Alex Gogl Alex Gogl
24 giu 2017 13:07:27

Questo restituisce solo un elemento cross sell, poiché get_post_meta() è impostato con $single = true

Nathan Nathan
13 set 2017 23:06:15
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];

?>
  1. 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;
}
22 giu 2017 14:45:10
Commenti

L'ho appena provato, il problema con questo codice è che non sfrutta davvero il design del tema

Alex Gogl Alex Gogl
22 giu 2017 14:56:55