Showing products in-stock only
WooCommerce - Showing products in-stock only
This solution is purely configuration based, highly recommended to use. Use solution 2 only if this is not working for some reason.
Step 1: Open up the Frontend search settings -> Custom fields panel

Step 2: Make a hidden filter, on the _stock_status custom field, with the value of “instock”:

After saving the options, the filter should be working.
I suggest using this solution if the first one is not working.
add_filter( 'asp_pagepost_results', 'asp_stock_status_filter', 10, 1 );
function asp_stock_status_filter( $pageposts ) {
foreach ($pageposts as $k=>$v) {
// Get the stock status
$stock_status = get_post_meta( $v->id, '_stock_status', true);
if ( empty($stock_status) || $stock_status == "instock" )
continue;
unset($pageposts[$k]);
}
return $pageposts;
}