从WooCommerce中的“相关产品”中排除产品类别

dwinnbrown

我正在尝试从WooCommerce的“相关产品”部分中排除产品类别(id:78)。我已经有一个自定义查询,该查询仅显示子类别中的相关产品。

这是我的代码:

<?php global $post, $product;

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

$subcategories_array = array(0);
$all_categories = wp_get_post_terms($product->id, 'product_cat');
foreach ($all_categories as $category) {
    $children = get_term_children($category->term_id, 'product_cat');
    if (!sizeof($children)) {
    $subcategories_array[] = $category->term_id;
    }
}

if (sizeof($subcategories_array) == 1) {
    return array();
}

$args = array(
    'orderby' => 'rand',
    'posts_per_page' => 3,
    'post_type' => 'product',
    'category__not_in' => array( 78 ),
    'fields' => 'ids',
    'meta_query' => $meta_query,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'field' => 'id',
            'terms' => $subcategories_array,
        )
    )
);

$wp_query = new WP_Query($args);

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

    <section class="related products">

    <h2><?php esc_html_e('Related products', 'woocommerce'); ?></h2>

    <?php woocommerce_product_loop_start(); ?>

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

        <?php
        global $post, $product;

        $post_object = get_post($product->get_id());

        setup_postdata($GLOBALS['post'] = & $post_object);

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

    <?php endwhile; ?>

    <?php woocommerce_product_loop_end(); ?>

    </section>

    <?php
endif;

wp_reset_postdata();

但是,排除上述产品类别似乎并没有达到我的预期。

任何帮助表示赞赏。

LoicTheAztec

Woocommerce产品类别是一个自定义分类,并且可以在不工作的WordPress的类别WP_Query使用category__not_in......而是试图在结合现有tax_query

另外,在现有的上tax_query需要将fields参数替换idterm_id (默认情况下已启用,因此您可以删除该行)
请参阅WP_Query分类法参数官方文档

请尝试以下操作:

$args = array(
    'orderby' => 'rand',
    'posts_per_page' => 3,
    'post_type' => 'product',
    'fields' => 'ids',
    'meta_query' => $meta_query,
    'tax_query' => array(
        array(
            'taxonomy' => 'product_cat',
            'terms'    => $subcategories_array,
        ),
        array(
            'taxonomy' => 'product_cat',
            'terms'    => array( 78 ),
            'operator' => 'NOT IN',
        )
    )
);

它应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从Woocommerce相关产品中排除产品类别

从产品类别中排除最近查看的产品小部件中的Woocommerce产品

从WP_Query中排除WooCommerce产品类别

从Woocommerce循环中排除产品类别

如何从woocommerce的功能中排除产品类别?

从循环短代码 Woocommerce 中排除产品类别

从Woocommerce档案库中的自定义显示按钮中排除产品类别

从WordPress全球搜索结果中排除woocommerce产品类别

从Woocommerce的自定义动态定价中排除产品类别

在Woocommerce中将相关产品类别描述追加到产品描述中

在Woocommerce中检查产品类别的产品

从Woocommerce中的子产品类别ID获取父产品类别ID

获取所有与Woocommerce中与产品类别相关的术语的属性

从Entrada主题的特定页面上的产品类别中排除产品

从WooCommerce的订单项中获取产品类别ID

在Woocommerce中根据产品类别更改货币符号

在Woocommerce中基于产品类别隐藏价格

获取WooCommerce中的所有产品类别

更改WooCommerce产品类别标题?

Woocommerce:产品类别小部件

woocommerce获取产品类别ID

Woocommerce的分层产品类别插件

在Woocommerce单一产品页面上排除特定的产品类别

在Woocommerce中显示类别产品之后移动产品类别描述

WooCommerce在产品标题中显示产品类别

在我的WooCommerce相关产品小部件中排除特定类别

将“销售”产品类别添加到Woocommerce中销售的产品中

在Woocommerce结帐中为产品类别中的特定虚拟产品启用送货地址

Woocommerce 相关产品排除子类别中的当前产品