I would like to show only "in stock" related products on WooCommerce single product pages.
I know I can override single-product/related.php
template file via My theme. Here below is the related code for this template:
<section class="related products">
<h2><?php _e( 'You May Also Want', 'MyStore' ); ?></h2>
<?php woocommerce_product_loop_start(); ?>
<?php foreach ( $related_products as $related_product ) : ?>
<?php
$post_object = get_post( $related_product->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object );
wc_get_template_part( 'content', 'product' ); ?>
<?php endforeach; ?>
<?php woocommerce_product_loop_end(); ?>
</section>
Is it possible making some changes to this file to only show "in stock" related products on WooCommerce single product page? Any help is appreciated.
3
Answers
UPDATE
Because when the 4 first products are out of stock it does not display anything (In case the default 4 products are shown) you could use the following snippet instead of overwriting the template file.
Overwriting the template file
There are always multiple solutions but 1 of them could be by overwriting the template file.
https://github.com/woocommerce/woocommerce/blob/02cf0dfaed5923513de0c88add597d1560c2cfd2/templates/single-product/related.php
yourtheme/woocommerce/single-product/related.php
Replace
With
Instead of editing template files, you can use
woocommerce_product_related_posts_query
dedicated filter hook to alter the query excluding "out of stock" products from displayed related products:Code goes in functions.php file of the active child theme (or active theme). Tested and works.
Related: Customize related products with a custom meta query in Woocommerce
This is what I’ve been using, and it works for me: