Hola. Comparto mi código para que el loop de los productos relacionados no muestre el producto que se está visualizando actualmente. Para lograrlo utilice el hook get_the_ID y una sentencia IF.
<!-- Productos Relacionados -->
<?php
$ID_producto_actual = get_the_ID();
$args = array(
'post_type' => 'producto',
'posts_per_page' => 6,
'order' => 'ASC',
'orderby' => 'title'
);
// En la siguiente variable se define el contenido
// que vamos a solicitar a la base de datos, a través
// del array de argumentos previamente definidos.
// Ahora la variable $productos es un objeto con la configuración
// necesaria para solicitar contenido.
$productos = new WP_Query($args);
?>
<!-- Ejecutar el loop con el objeto $productos -->
<?php if($productos->have_posts()) { ?>
<div class="row justify-content-center productos-relacionados">
<div class="col-12">
<h3 class="my-3 text-center">Productos relacionados</h3>
</div>
<?php while($productos->have_posts()) { ?>
<?php $productos->the_post(); ?>
<?php if(get_the_ID() != $ID_producto_actual) { ?>
<div class="col-2 my-3 text-center">
<?php the_post_thumbnail('thumbnail'); ?>
<h4>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h4>
</div>
<?php } ?>
<?php } ?>
</div>
<?php } ?>
Espero que les sea de utilidad. Saludos!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?