WordPress : Le permalien reste le même sur chaque page

Publié par Jean-Michel le

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_postspour créer des requêtes personnalisées. Ce n’est pas seulement mon emphase, mais aussi le codex. Le seul gros problème query_postsest 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, showpostsa 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_Queryobjet à 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; ?>

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *