Одна вещь, которую я сразу замечаю, это то, что вы открываете свой тег li внутри «while», закрываете свой тег li за пределами «while», это может быть так просто, как, может быть, проверить HTML и посмотреть, есть ли что-нибудь остальное.
Хорошо, вот упрощенный способ ее решения, вы можете изменить его, чтобы сделать его немного более аккуратным, но логика есть:
<?php
$counter = 0;
while ( $loop->have_posts() ) : $loop->the_post(); global $product;?>
<?php if($counter % 4 == 0): echo '<li>'; endif; ?>
<a href="#">WooCommerce Product</a>
<?php if($counter % 4 == 4): echo '</li>'; endif; ?>
<?php
$counter++;
if($counter === 4) : $counter = 0; endif;
endwhile;
?>