Woocommerce - Afișarea produselor încrucișate (cross-sells) pe pagina individuală a produsului

22 iun. 2017, 14:32:48
Vizualizări: 20K
Voturi: 7

Încerc să afișez produsele încrucișate (cross-sells) pe pagina individuală a unui produs în loc să le afișez în coș:

Până acum am încercat următorul cod:

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

Totuși, acest cod va afișa doar upsell-uri sub upsell-uri, deci este același conținut afișat de două ori. Nu sunt sigur ce acțiune să folosesc în loc de

do_action( 'woocommerce_after_single_product_summary_upsell_display' ); ?>
0
Toate răspunsurile la întrebare 2
2
12
add_action('woocommerce_after_single_product_summary', 'show_cross_sell_in_single_product', 30);
function show_cross_sell_in_single_product(){
    $crosssells = get_post_meta( get_the_ID(), '_crosssell_ids',true);

    if(empty($crosssells)){
        return;
    }

    $args = array( 
        'post_type' => 'product', 
        'posts_per_page' => -1, 
        'post__in' => $crosssells 
        );
    $products = new WP_Query( $args );
    if( $products->have_posts() ) : 
        echo '<div class="cross-sells"><h2>Produse Cross-Sell</h2>';
        woocommerce_product_loop_start();
        while ( $products->have_posts() ) : $products->the_post();
            wc_get_template_part( 'content', 'product' );
        endwhile; // sfârșitul buclei.
        woocommerce_product_loop_end();
        echo '</div>';
    endif;
    wp_reset_postdata();
}
23 iun. 2017 09:25:23
Comentarii

Acest cod are potențial, îmi place mult mai mult decât personalizarea unei teme. Trebuie doar să fac niște modificări la stiluri și ar trebui să funcționeze. Există vreo modalitate fără declarații absolute de clase? Gen fără partea <div class="..."></div>?

Alex Gogl Alex Gogl
24 iun. 2017 13:07:27

Aceasta returnează doar un singur produs cross sell, deoarece get_post_meta() este setat pentru $single = true

Nathan Nathan
13 sept. 2017 23:06:15
1

găsește acest cod și elimină-l

1: obține ID-urile produselor cross sell folosind cheia meta '_crosssell_ids'.

<?php

/* crossells */

$crosssell_ids = get_post_meta( get_the_ID(), '_crosssell_ids' ); 
$crosssell_ids=$crosssell_ids[0];

?>
  1. Parcurge produsele după 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 iun. 2017 14:45:10
Comentarii

Tocmai am încercat, problema cu acest cod este că nu utilizează cu adevărat designul temei

Alex Gogl Alex Gogl
22 iun. 2017 14:56:55