2014-10-11 123 views
2

相关产品是从您的商店中抽取与当前产品共享相同标签或类别的其他产品的部分。Woocommerce:只显示来自同一子类别的相关产品

源:Woocommerce Docs

可以说,我卖我的商店表(和其他物品)。表是一个类别。我有3个子类与小类,中等和大类一起使用。

我想要什么:当你点击一张小桌子时。相关产品只应显示小表。 它做什么:当你点击一张小桌子时。相关的产品显示了一个不论大小的表格。

有谁知道我可以如何改变它,以我想要的方式?

回答

0

为了做到这一点,所有的产品必须只有一个子类别,如小,中等..等,但如果你的产品有两个以上是不可能的,我想。

但有来完成你想要什么简单的方法,答案是交叉销售pleace read this

0

你必须在你的模板woocommerce->单品文件夹和文件related.php创建。

只需粘贴此代码即可。

<?php 
/** 
* Related Products 
* 
* This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php. 
* 
* HOWEVER, on occasion WooCommerce will need to update template files and you 
* (the theme developer) will need to copy the new files to your theme to 
* maintain compatibility. We try to do this as little as possible, but it does 
* happen. When this occurs the version of the template file will be bumped and 
* the readme will list any important changes. 
* 
* @see   https://docs.woocommerce.com/document/template-structure/ 
* @author  WooThemes 
* @package  WooCommerce/Templates 
* @version  1.6.4 
*/ 

if (! defined('ABSPATH')) { 
    exit; 
} 

global $product, $woocommerce_loop; 

if (empty($product) || ! $product->exists()) { 
    return; 
} 

if (! $related = $product->get_related($posts_per_page)) { 
    return; 
} 

$cats_array = array(0); 

// get categories 
$terms = wp_get_post_terms($product->id, 'product_cat'); 

// select only the category which doesn't have any children 
foreach ($terms as $term) { 
    $children = get_term_children($term->term_id, 'product_cat'); 
    if (!sizeof($children)) 
    $cats_array[] = $term->term_id; 
} 

var_dump($cats_array); 

$args = apply_filters('woocommerce_related_products_args', array(
    'post_type' => 'product', 
    'ignore_sticky_posts' => 1, 
    'no_found_rows' => 1, 
    'posts_per_page' => $posts_per_page, 
    'orderby' => $orderby, 
    'tax_query' => array(
     array(
      'taxonomy' => 'product_cat', 
      'field' => 'id', 
      'terms' => $cats_array 
     ), 
    ) 
)); 

$products     = new WP_Query($args); 
$woocommerce_loop['name'] = 'related'; 
$woocommerce_loop['columns'] = apply_filters('woocommerce_related_products_columns', $columns); 

if ($products->have_posts()) : ?> 

    <div class="related products"> 

     <h2><?php _e('Related Products', 'woocommerce'); ?></h2> 

     <?php woocommerce_product_loop_start(); ?> 

      <?php while ($products->have_posts()) : $products->the_post(); ?> 

       <?php wc_get_template_part('content', 'product'); ?> 

      <?php endwhile; // end of the loop. ?> 

     <?php woocommerce_product_loop_end(); ?> 

    </div> 

<?php endif; 

wp_reset_postdata(); 
相关问题