Исключить категорию товара из Сопутствующих товаров в WooCommerce - PullRequest
3 голосов
/ 14 марта 2019

Я пытаюсь исключить категорию продукта (id: 78) из раздела связанных продуктов в WooCommerce. У меня уже есть пользовательский запрос, который показывает только связанные продукты из дочерней категории.

Это мой код:

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

Однако, исключая вышеупомянутую категорию продуктов, похоже, не работает, как я ожидал.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 14 марта 2019

Категории продуктов Woocommerce являются пользовательской таксономией и не могут работать как категории Wordpress в WP_Query с использованием category__not_in… Вместо этого попробуйте объединить это в существующую tax_query.

Также в существующем tax_query, для fields аргумента необходимо заменить id на term_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',
        )
    )
);

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...