根据从ID为142的类别ID中选择的子类别获取相关产品

时间:2019-06-21 作者:Wilda Sagita

您好,我想在单个产品页面中显示相关产品,目前它显示当前产品中所选类别的产品。我只想相关的产品有相关的基础上,在ID为142的类别中选择的子类别。

ID为142的类别的名称为“艺术家”,然后艺术家的子类别为“mike”和“joe”。我想要的是,当产品有艺术家Mike时,相关产品将显示来自Mike的艺术家的所有产品。

这是我的代码

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;
}

// Dont bother if none are set
if ( sizeof( $cats_array ) == 1 ) return 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,
\'post__not_in\' => array( $product->get_id() ),
\'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-related\'); ?>

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

    <?php woocommerce_product_loop_end(); ?>

</div>
<?php endif;
wp_reset_postdata();
请帮忙,我是初学者。谢谢

1 个回复
SO网友:Owais Alam

您可以使用此代码或改编为适合您的案例,,希望它能工作。。将其添加到函数中。php

add_filter( \'woocommerce_product_related_posts\', \'woocommerce_get_direct_related_products\' );

function woocommerce_get_direct_related_products() {
    global $woocommerce, $product;

    // Related products are found from category
    $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;
    }

    // Don\'t bother if none are set
    if ( sizeof( $cats_array ) == 1 ) return array();

    // Meta query
    $meta_query = array();
    $meta_query[] = $woocommerce->query->visibility_meta_query();
    $meta_query[] = $woocommerce->query->stock_status_meta_query();

    $limit = 5;

    // Get the posts
    return array(
        \'orderby\'       => \'rand\',
        \'posts_per_page\'=> $limit,
        \'post_type\'     => \'product\',
        \'fields\'        => \'ids\',
        \'meta_query\'    => $meta_query,
        \'tax_query\'     => array(
            array(
                \'taxonomy\'  => \'product_cat\',
                \'field\'     => \'id\',
                \'terms\'     => $cats_array
            )
        )
    );
}

相关推荐

为什么在动态更改短码内容后不再检测到我的AJAX事件

我有两个input select (下拉)在我的快捷代码的内容中。第一个是在初始化短代码内容时创建的,而第二个是在用户选择第一个下拉列表的值时创建的。为此,第二个是使用Ajax句柄动态创建的。选择第二个条目必须显示一些相应的数据。第一个下拉菜单工作正常:它显示第二个下拉菜单及其值。当我想选择第二个下拉列表的值时,就会出现问题。我使用相同的jQuery事件(element.on(\'change\' ...) 它永远不会熄灭。它与第一个完全相同,但不起作用。谁能给我解释一下为什么?以下是我的PHP代码:&l