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' ); ?>

Alex Gogl
171
Все ответы на вопрос
2
2
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();
}

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

24 июн. 2017 г. 13:07:27
1
Найти этот код и удалить его
1: Получить ID перекрестных товаров (кросс-селов) используя мета-ключ '_crosssell_ids'.
<?php
/* кросс-селы */
$crosssell_ids = get_post_meta( get_the_ID(), '_crosssell_ids' );
$crosssell_ids=$crosssell_ids[0];
?>
- Выполнить цикл по товарам по их 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;
}

Alpesh Rathod
111
22 июн. 2017 г. 14:45:10
Похожие вопросы
3
ответов