php-WooCommerce-按标签显示相关产品

我想显示基于标签的相关产品.我尝试了几种方法,但没有一个起作用.有人知道有办法强制基于标签(而不是类别)显示相关产品吗?

这是我曾经做过的代码(我将这些代码添加到functions.php中):

//New "Related Products" function for WooCommerce
function get_related_custom( $id, $limit = 5 ) {
    global $woocommerce;

    // Related products are found from category and tag
    $tags_array = array(0);
    $cats_array = array(0);

    // Get tags
    $terms = wp_get_post_terms($id, 'product_tag');
    foreach ( $terms as $term ) $tags_array[] = $term->term_id;

    // Get categories (removed by NerdyMind)
/*
    $terms = wp_get_post_terms($id, 'product_cat');
    foreach ( $terms as $term ) $cats_array[] = $term->term_id;
*/

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

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

    // Get the posts
    $related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array(
        'orderby'        => 'rand',
        'posts_per_page' => $limit,
        'post_type'      => 'product',
        'fields'         => 'ids',
        'meta_query'     => $meta_query,
        'tax_query'      => array(
            'relation'      => 'OR',
            array(
                'taxonomy'     => 'product_cat',
                'field'        => 'id',
                'terms'        => $cats_array
            ),
            array(
                'taxonomy'     => 'product_tag',
                'field'        => 'id',
                'terms'        => $tags_array
            )
        )
    ) ) );
    $related_posts = array_diff( $related_posts, array( $id ));
    return $related_posts;
}
add_action('init','get_related_custom');

解决方法:

这应该为您完成,但是您应该将其添加到single-product.php或/woocommerce/single-product/related.php中

<?php
    global $post;

    $cats = wp_get_post_terms( $post->ID, "product_cat" );
    foreach ( $cats as $cat ) {
        $cats_array[] .= $cat->term_id;
    }

    $tags = wp_get_post_terms( $post->ID, "product_tag" );
    foreach ( $tags as $tag ) {
        $tags_array[] .= $tag->term_id;
    }

    $related_posts = new WP_Query(
        array(
            'orderby' => 'rand',
            'posts_per_page' => 5,
            'post_type' => 'product',
            'post__not_in' => array($post->ID),
            'tax_query' => array(
                /*  
                    'relation' => 'OR',
                    array(
                            'taxonomy' => 'product_cat',
                            'field' => 'id',
                            'terms' => $cats_array
                    ),
                */
                    array(
                            'taxonomy' => 'product_tag',
                            'field' => 'id',
                            'terms' => $tags_array
                    )
            )
        ) 
    );
?>
上一篇:php-Woocommerce-产品页面上的“添加到购物车和立即购买”按钮


下一篇:php-Woocommerce-当购物车中没有东西时,wc_add_notice()未添加到会话中