J'installe en prod un projet qui marche très bien en dév :
sur mes pages bouclant sur mes types de post personnalisés (custom post type) tous les permaliens sont bons à savoir toto.com/evenements/nomdelevenement sauf le dernier lu qui a toto.com/nomdelevenement et ça pointe sur rien bien evidemment :

Page archive :

while ( have_posts() ) : the_post();
   get_template_part( 'template-parts/content',  'evenements' );
endwhile;

Page content-evenements :

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>  itemscope itemtype="http://schema.org/Event">
<?php     
        if( function_exists('maFonction')) { maFonction(); }
?>
</article>

dans mon mu plugin :

function maFonction(){
get_the_permalink(); //entre autre
}
Manhattan a écrit :

<?php if ( have_posts() ) : 
	while ( have_posts() ) : the_post();
	echo get_permalink( $post-&gt;ID ).'<br/>';
	endwhile;
endif; ?>

Le IF est a priori superflu, puisque tu testes exactement la même condition immédiatement après dans la boucle While...

tant que (post disponible)
	afficher permalink + saut de ligne
	fin de boucle

Ce pseudo code, réduit à la seule boucle, devrait fonctionner (c'est du moins le cas en Java)...
Vrai, mais c'est parce que j'ai nettoyé le code : il existe un else à la base.
Et j'ai beau déconstruire petit à petit, je ne comprend pas d'où vient ce problème de réécriture d'url avec slug. A la rigueur s'ils dysfonctionnait sur tous les enregs, mais non, sur le premier uniquement. (ce qui en soit est déjà une piste, mais pas assez pour moi pour l'instant).