WooCommerce: отображение перекрестных продаж на странице товара

22 июн. 2017 г., 14:32:48
Просмотры: 20K
Голосов: 7

Я пытаюсь показать перекрестные продажи на странице отдельного товара вместо корзины:

Пока я попробовал следующий код:

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

Однако это показывает только допродажи под допродажами, то есть получается один и тот же контент дважды. Я не уверен, какое действие использовать вместо

do_action( 'woocommerce_after_single_product_summary_upsell_display' ); ?>
0
Все ответы на вопрос 2
2
12
add_action('woocommerce_after_single_product_summary', 'show_cross_sell_in_single_product', 30);
function show_cross_sell_in_single_product(){
    // Получаем ID сопутствующих товаров из метаполя текущего продукта
    $crosssells = get_post_meta( get_the_ID(), '_crosssell_ids',true);

    // Если сопутствующих товаров нет - выходим из функции
    if(empty($crosssells)){
        return;
    }

    // Аргументы для WP_Query
    $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>Сопутствующие товары</h2>';
        woocommerce_product_loop_start();
        while ( $products->have_posts() ) : $products->the_post();
            wc_get_template_part( 'content', 'product' );
        endwhile; // конец цикла
        woocommerce_product_loop_end();
        echo '</div>';
    endif;
    
    // Сбрасываем данные запроса
    wp_reset_postdata();
}
23 июн. 2017 г. 09:25:23
Комментарии

Этот код действительно что-то стоит, мне нравится гораздо больше, чем кастомизация темы. Нужно только немного изменить стили, и все заработает. Есть ли способ обойтись без абсолютных объявлений классов? То есть без части <div class="..."></div>?

Alex Gogl Alex Gogl
24 июн. 2017 г. 13:07:27

Это возвращает только один перекрестный товар, поскольку get_post_meta() установлен с параметром $single = true

Nathan Nathan
13 сент. 2017 г. 23:06:15
1

Найти этот код и удалить его

1: Получить ID перекрестных товаров (кросс-селов) используя мета-ключ '_crosssell_ids'.

<?php

/* кросс-селы */

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

?>
  1. Выполнить цикл по товарам по их 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(); ?>' title="<?php the_title_attribute(); ?>"><?php
the_post_thumbnail( 'thumbnail', array('alt' => get_the_title(), 'title' => get_the_title()) );
the_title();
?></a><?php
endwhile;
}
22 июн. 2017 г. 14:45:10
Комментарии

Только что попробовал, проблема с этим кодом в том, что он не использует дизайн темы по-настоящему

Alex Gogl Alex Gogl
22 июн. 2017 г. 14:56:55