WordPress : Le permalien reste le même sur chaque page
J’ai affiché le titre du message dans la balise d’ancrage, après quoi j’ai défini le permalien. Le lien permanent, cependant, ne fonctionne pas avec le même titre que celui provenant du message. C’est comme obtenir le lien précédent qui vient de cliquer. Il va à la même adresse encore et encore et non au lien de poste exact.
<a class="heading-link" href="<?php the_permalink(); ?>">
<?php
query_posts('cat=4&showposts=1');
if (have_posts()) :
while (have_posts()) : the_post();
the_title();
endwhile;
endif;
wp_reset_query();
?>
</a>
Solution n°1 trouvée
Tout d’abord, vous ne devez jamais utiliser query_posts
pour créer des requêtes personnalisées. Ce n’est pas seulement mon emphase, mais aussi le codex. Le seul gros problème query_posts
est que, dans de nombreuses circonstances, la pagination échoue
Remarque : Cette fonction n’est pas destinée à être utilisée par des plugins ou des thèmes. Comme expliqué plus tard, il existe de meilleures options plus performantes pour modifier la requête principale. query_posts() est un moyen trop simpliste et problématique de modifier la requête principale d’une page en la remplaçant par une nouvelle instance de la requête. Il est inefficace (réexécute les requêtes SQL) et échouera carrément dans certaines circonstances (surtout souvent lorsqu’il s’agit de la pagination des messages).
Vous devez construire votre requête personnalisée avec WP_Query
.
Jetez un oeil à the_title( $before, $after, $echo );
. Voici les paramètres
$ avant
(string) (facultatif) Texte à placer avant le titre.
Par défaut : Aucun
$après
(chaîne) (facultatif) Texte à placer après le titre.
Par défaut : Aucun
$écho
- (Booléen) (optionnel) Affiche le titre (TRUE) ou le retourne pour l’utiliser en PHP (FALSE).
- Par défaut : VRAI
Donc, vous pouvez simplement faire quelque chose comme ça
the_title( '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a>' );
Votre requête devrait alors ressembler à ceci avec tout ce qui précède. Avant que j’oublie, showposts
a longtemps été déprécié, il a été remplacé par posts_per_page
. Si vous aviez défini le débogage sur true dans wp-config, vous devriez avoir reçu un avis de dépréciation dans le frontal qui l’aurait indiqué. Lire ici : Déboguer WordPress
<?php
$args = array(
'cat' => 4,
'posts_per_page' => 1
);
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
the_title( '<a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a>' );
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
Solution n°2 trouvée
Tout d’abord, n’utilisez pas query_posts
; utiliser un WP_Query
objet à la place.
La raison pour laquelle vos liens ne s’affichent pas correctement est que le lien ( <a>
balise) n’est pas réellement dans la boucle.
<?php while ( have_posts() ) : the_post(); ?>
<a class="heading-link" href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
<?php endwhile; ?>
0 commentaire