您好,我想在单个产品页面中显示相关产品,目前它显示当前产品中所选类别的产品。我只想相关的产品有相关的基础上,在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();
请帮忙,我是初学者。谢谢
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
)
)
);
}