WooCommerce Related Products only showing 2 products

I’ve got Related Products set up, but it’s only showing 2. I need it to show 5 across, but none of the code that I’ve tweaked has changed anything.

This is my related.php code:

Read More
<?php

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

global $product, $woocommerce_loop;

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

$related = $product->get_related( $posts_per_page );

if ( sizeof( $related ) == 0 ) return;

$args = apply_filters( 'woocommerce_related_products_args', array(
    'post_type'            => 'product',
    'ignore_sticky_posts'  => 1,
    'no_found_rows'        => 1,
    'posts_per_page'       => 5,
    'orderby'              => $orderby,
    'post__in'             => $related,
    'post__not_in'         => array( $product->id )
) );

$products = new WP_Query( $args );

$woocommerce_loop['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' ); ?>

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

        <?php woocommerce_product_loop_end(); ?>

    </div>

<?php endif;

wp_reset_postdata();

and this is the related products code on the single product page template:

<div class="row">
                <div class="col-md-12">
                  <?php echo do_shortcode ( '[related_products per_page="5"]' ); ?>
                </div>
              </div>

Related posts

1 comment

  1. You need to create a woocomerce child page and connect to that. The ‘posts_per_page’ => 5, has no control over what is currently displaying. The woocomerce page handles that.

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

    Then if you’re using a child theme create a folder called “woocommerce” and place a file called “similarProductsFive.php” inside of it, or place the child woocommerce folder with that file inside your theme.

    Then add this code to similarProuctFive.php

    <?php
    /**
     * The template for displaying product content within loops.
     *
     * Override this template by copying it to yourtheme/woocommerce/content-product.php
     *
     * @author      WooThemes
     * @package     WooCommerce/Templates
     * @version     1.6.4
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
        exit; // Exit if accessed directly
    }
    
    global $product, $woocommerce_loop;
    
    // Store loop count we're currently on
    if ( empty( $woocommerce_loop['loop'] ) )
        $woocommerce_loop['loop'] = 0;
    
    // Store column count for displaying the grid
    if ( empty( $woocommerce_loop['columns'] ) )
        $woocommerce_loop['columns'] = apply_filters( 'loop_shop_columns', 4 );
    
    // Ensure visibility
    if ( ! $product || ! $product->is_visible() )
        return;
    
    // Increase loop count
    $woocommerce_loop['loop']++;
    
    // Extra post classes
    $classes = array();
    if ( 0 == ( $woocommerce_loop['loop'] - 1 ) % $woocommerce_loop['columns'] || 1 == $woocommerce_loop['columns'] )
        $classes[] = 'first';
    if ( 0 == $woocommerce_loop['loop'] % $woocommerce_loop['columns'] )
        $classes[] = 'last';
        $classes[] = "store-similar-products product";
    ?>
    <li <?php post_class( $classes ); ?>>
    
        <?php do_action( 'woocommerce_before_shop_loop_item' ); ?>
    
        <a href="<?php the_permalink(); ?>">
    
            <?php
                /**
                 * woocommerce_before_shop_loop_item_title hook
                 *
                 * @hooked woocommerce_show_product_loop_sale_flash - 10
                 * @hooked woocommerce_template_loop_product_thumbnail - 10
                 */
                do_action( 'woocommerce_before_shop_loop_item_title' );
            ?>
    
            <h3><?php the_title(); ?></h3>
    
            <?php
                /**
                 * woocommerce_after_shop_loop_item_title hook
                 *
                 * @hooked woocommerce_template_loop_rating - 5
                 * @hooked woocommerce_template_loop_price - 10
                 */
                do_action( 'woocommerce_after_shop_loop_item_title' );
            ?>
    
        </a>
    
        <?php
    
            /**
             * woocommerce_after_shop_loop_item hook
             *
             * @hooked woocommerce_template_loop_add_to_cart - 10
             */
            do_action( 'woocommerce_after_shop_loop_item' ); 
    
        ?>
    
    </li>
    

    You can then change the amount of products displaying here:

    $woocommerce_loop['columns'] = apply_filters( 'loop_shop_columns', 4 )
    

Comments are closed.