WooCommerce related products same category code example

Example 1: woocommerce change related products tect

// CHANGE RELATED PRODUCTS TEXT
function my_text_strings( $translated_text, $text, $domain ) {
    switch ( $translated_text ) {
        case 'Related products' :
            $translated_text = __( 'You may also like...', 'woocommerce' );
            break;
    }
    return $translated_text;
}
add_filter( 'gettext', 'my_text_strings', 20, 3 );

Example 2: display product from same categories related products woocommerce

<?php
/**
 * Related Products
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/related.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     3.9.0
 */

if ( ! defined( 'ABSPATH' ) ) {
  exit;
}

global $product, $woocommerce_loop;

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

if ( ! $related = $product->get_related( $posts_per_page ) ) {
  return;
}

// Get ID of current product, to exclude it from the related products query
$current_product_id = $product->get_id();

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

$args = apply_filters( 'woocommerce_related_products_args', array(
  'post_type' => 'product',
  'post__not_in' => array( $current_product_id ),   // exclude current product
  'ignore_sticky_posts' => 1,
  'no_found_rows' => 1,
  'posts_per_page' => $posts_per_page,
  'orderby' => $orderby,
  '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() ) : ?>

  <section class="related products">

    <?php
    $heading = apply_filters( 'woocommerce_product_related_products_heading', __( 'Related products', 'woocommerce' ) );

    if ( $heading ) :
    ?>
      <h2><?php echo esc_html( $heading ); ?></h2>
    <?php endif; ?>

    <?php woocommerce_product_loop_start(); ?>

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

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

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

    <?php woocommerce_product_loop_end(); ?>

  </section>

<?php endif;

wp_reset_postdata();

Example 3: Woocommerce Get Related Products by Same Sub Category with no Repeate Same Product

/**
 * @snippet       Get Related Products by Same Sub Category with no Repeate Same Product @ WooCommerce Single
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 3.8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */
 
add_filter('woocommerce_related_products', 'add_related_products');
function add_related_products($related_product_ids)
{
    global $post;

// get the cats this product is in
    $terms = get_the_terms($post->ID, 'product_cat');
 
// if there is only one category jump out.
    if (count($terms) === 1) {
    return $args;
    }
 
$cats = array();
// remove anything that is a parent cat
    foreach ($terms as $k => $term) {
    if ($term->parent === 0) {
    unset($terms[$k]);
    } else {
    // build list of terms we do want (children)
    $cats[] = $term->term_id;
    }
    }
 
    $post_ids = get_posts(array(
    'post_type' => 'product',
    'numberposts' => -1, // get all posts.
    'exclude' => $post->ID,
    'tax_query' => array(
    array(
    'taxonomy' => 'product_cat',
    'field' => 'term_id',
    'terms' => $cats,
    ),
// Remove current product
    array(
    'taxonomy' => 'product_cat',
    'field' => 'term_id',
    'terms' => $post->ID,
    'operator' => 'NOT IN',
    ),
    ),
    'fields' => 'ids', // Only get post IDs
    ));

    return $post_ids;
}