Я использую шорткоды WooCommerce для отображения товаров в статьях или на отдельных страницах, но думаю вы согласитесь, что выводить товары которых нет в наличии просто неразумно.

Вставьте следующий код в файл function.php и ваши шорткоды WooCommerce больше не будут отображать отсутствующий товар.

//WooCommerce 3.4.5
//Скрываем в шорткодах отсутствующие товары
add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ){
    if( $loop_name == 'sale_products' ){ //Шорткод Товары по скидке
        $query_args['meta_query'] = array( array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => 'NOT LIKE',
        ) );
    }
    return $query_args;
}, 10, 3);

add_filter( 'woocommerce_shortcode_products_query', function( $query_args, $atts, $loop_name ){
    if( $loop_name == 'recent_products' ){ //Шорткод Рекомендуемые товары
        $query_args['meta_query'] = array( array(
            'key'     => '_stock_status',
            'value'   => 'outofstock',
            'compare' => 'NOT LIKE',
        ) );
    }
    return $query_args;
}, 10, 3);

Где находится файл function.php?

Файл function.php находится в папке вашей темы WordPress, путь к файлу следующий:
/wp-content/themes/Тема WordPress/function.php

Этот код еще работает?

Пожалуйста, сообщите мне в комментариях о работоспособности. Данный код тестировался с темой Newspaper, версией PHP 7 и WooCommerce указанной в коде.