我正在开发一个WooCommerce主题,在单个产品页面上,我想展示来自同一供应商类别的产品轮播。
我有以下类别结构:
所有产品
供应商
在查看第1类产品时,如果将产品分配到此类子类别,我希望显示来自同一供应商名称类别的其他产品的旋转木马。
在我的示例中,供应商和所有产品都是同一级别的父类别。
做一个自定义的产品循环很容易,但老实说我不知道如何处理找到合适的子类别背后的逻辑。我无法想象它,这就是为什么我无法找到正确的解决方案。
每个产品只能分配给一个供应商名称,供应商和产品都是常规的woocommerce类别。
暂时我有以下代码
wooctrl_same_vendor_products('vendors');
function wooctrl_same_vendor_products($parent_cat_name){
$parentCat = get_term_by('name', $parent_cat_name, 'product_cat');
$product_cat_ID = $parentCat->term_id;
$args = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $product_cat_ID,
'taxonomy' => 'product_cat'
);
$subcats = get_categories($args);
foreach ($subcats as $subcat) {
//check if product is inside ?
}
}
我应该首先创建所有供应商子类别的数组并在那里搜索产品,还是有更简洁的方法直接从$ product变量解决它?
答案 0 :(得分:0)
我有这个工作,但我认为这是一个安静的肮脏解决方案。你能否看一下代码,告诉我如何在一个好的实践中做到这一点"方式是什么?
因此,在第一步中,我正在准备供应商主要类别下的所有childe类别列表:
wooctrl_vendor_cats('vendors'); // <-- main category slug
function wooctrl_vendor_cats($parent_cat_name){
$parentCat = get_term_by('name', $parent_cat_name, 'product_cat');
$product_cat_ID = $parentCat->term_id;
$args = array(
'hierarchical' => 1,
'show_option_none' => '',
'hide_empty' => 0,
'parent' => $product_cat_ID,
'taxonomy' => 'product_cat'
);
$subcats = get_categories($args);
foreach ($subcats as $subcat) {
//print_r($subcat->slug);
check_if_in_vendor($subcat->slug); // <-- here I am passing each slug in order to compare it with products categories
}
}
以下是我与供应商类别交叉引用产品类别以找到匹配项的功能,然后我循环显示其中的所有产品:
function check_if_in_vendor($cat_slug){
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;
if ( in_array( $cat_slug, $categories ) ) {
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'product_cat' => $cat_slug,
'orderby' => 'rand',
'post__not_in' => array( $post->ID )
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li class="product">
<h3><?php the_title(); ?></h3>
</li>
<?php endwhile; ?>
<?php wp_reset_query();
}
}
答案 1 :(得分:0)
阅读安德鲁评论并阅读那里提供的文档(以前从未见过的文档,所以感谢安德鲁!那些给了我很多) 我决定按照SKU代码的第一部分过滤产品,因为我发现它最快。从WP管理面板管理输出内容也更容易。
在这里,我的代码使用WooCommerce 3功能进行了更新。它比以前的解决方案更好吗?你觉得怎么样?
function wooctrl_display_vendor_products_bySKU($number_of_products_displayed, $ordered_by) {
global $product;
$currentSku = $product->get_sku();
$groupSku = explode('-', $currentSku)[0];
$args = array(
'sku' => $groupSku,
'post_type' => 'product',
'posts_per_page' => $number_of_products_displayed,
'orderby' => $ordered_by,
'exclude' => array($product->get_id())
);
$query = new WC_Product_Query($args);
$sku_products = $query->get_products();
//print_r($products);
if ($sku_products) : ?>
<div class="wrapper">
<h1 class="section-header"> <?php echo __('Same vendor products', 'genesis-wooctrl') ?> </h1>
<?php foreach ($sku_products as $sku_product) : ?>
<?php
$post_object = get_post($sku_product->get_id());
setup_postdata($GLOBALS['post'] =& $post_object);
wc_get_template_part('content', 'product'); ?>
<?php endforeach; ?>
</div>
<?php endif;
wp_reset_postdata();
}
对于那些寻求可靠功能来源的人来说,这里有帮助我解决这个问题的网址:
https://businessbloomer.com/woocommerce-easily-get-product-info-title-sku-desc-product-object/
https://github.com/woocommerce/woocommerce/wiki/Product-Data-Schema