Vous avez écrit une annonce importante. Un message de bienvenue. Une note « à lire en premier ». Vous l’avez épinglée en haut de votre blog. Elle est restée là pendant des semaines.
Puis un jour — elle a disparu. Un articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More plus récent a pris sa place. Ou pire, plus rien n’est épinglé du tout.
La fonctionnalité des articles épinglés (sticky posts) de WordPress semble simple. Mais quand elle se casse, c’est frustrant et déroutant. Ce guide explique pourquoi les articles épinglés se désépingleux tout seuls et comment résoudre le problème.
Les articles épinglés (sticky posts) sont des articles WordPress qui restent en haut de votre pageUn contenu statique (ex. : "À propos", "Contact") qui ne fa... More de blog, quelle que soit leur date de publication. Ils apparaissent avant les articles plus récents.
Comment épingler un articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More :
Où ils apparaissent :
/blog)pre_get_posts avec 'ignore_sticky_posts' => falseCe qu’ils n’affectent pas :
WordPress permet plusieurs articles épinglés. Si l’articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More A et l’articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More B sont tous deux épinglés, l’articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More B (plus récent) apparaît en premier — mais l’articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More A devrait toujours être épinglé en dessous.
Le vrai problème : Un articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More plus récent a été accidentellement défini comme épinglé, poussant votre article épingléUn article épinglé en haut de la page du blog, qui prend l... More d’origine plus bas (parfois hors de l’écran, là où vous ne le voyez pas).
Comment vérifier :
Correction : Retirez le statut épinglé de tout articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More qui ne devrait pas être épinglé.
Tous les thèmes ne respectent pas les articles épinglés. Certains thèmes de blog les ignorent complètement. D’autres utilisent des boucles personnalisées qui contournent la logique d’épinglage.
Comment tester :
Correction : Contactez le développeur de votre thème ou modifiez le home.php ou index.php de votre thème pour inclure :
php
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php if ( is_sticky() ) : ?>
// Mettez en évidence ou stylisez les articles épinglés différemment
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
Certaines extensions interfèrent avec les articles épinglés :
Comment tester :
Correction : Remplacez l’extensionUn logiciel qui ajoute des fonctionnalités spécifiques à ... More problématique ou contactez son support.
Si vous (ou votre thème) utilisez une WP_Query personnalisée sur la pageUn contenu statique (ex. : "À propos", "Contact") qui ne fa... More de blog, les articles épinglés sont ignorés par défaut, sauf si vous dites explicitement à WordPress de les inclure.
Code problématique :
php
$custom_query = new WP_Query(array(
'posts_per_page' => 10
// 'ignore_sticky_posts' vaut 1 par défaut (ignorer)
));
Correction : Ajoutez 'ignore_sticky_posts' => 0 à votre requête :
php
$custom_query = new WP_Query(array(
'posts_per_page' => 10,
'ignore_sticky_posts' => 0
));
Puis affichez les articles épinglés séparément :
php
<?php
$sticky = get_option('sticky_posts');
if (!empty($sticky)) {
$sticky_query = new WP_Query(array(
'post__in' => $sticky,
'ignore_sticky_posts' => 1
));
// Affichez les articles épinglés ici
}
?>
Rare mais possible. L’option sticky_posts dans votre table wp_options peut être corrompue ou vide.
Comment vérifier via phpMyAdmin :
wp_optionsoption_name = 'sticky_posts'option_value devrait ressembler à a:1:{i:0;s:3:"123";} (tableau sérialisé d’IDs d’articles)Correction : Si corrompu, définissez manuellement les articles épinglés :
sticky_postsoption_value sur a:1:{i:0;s:3:"[ID_ARTICLE]";} (remplacez [ID_ARTICLE] par l’ID réel de votre articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More)Alternative : Utilisez WP CLI :
bash
wp option patch insert sticky_posts 123
Suivez cette liste de vérification dans l’ordre :
Étape 1 : Vérifiez si les articles épinglés sont toujours définis
Étape 2 : Vérifiez la présence de multiples articles épinglés
Étape 3 : Testez avec un thème par défaut
Étape 4 : Testez avec toutes les extensions désactivées
Étape 5 : Videz tous les caches
Étape 6 : Réparez la base de donnéesL'endroit où tout le contenu, les réglages et les données... More
wp_optionsÉtape 7 : Définissez manuellement les articles épinglés via du code
Ajoutez ceci à votre functions.php temporairement :
php
function force_sticky_posts() {
update_option('sticky_posts', array(123)); // Remplacez 123 par l'ID de votre articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More
}
add_action('init', 'force_sticky_posts');
Après avoir confirmé que cela fonctionne, supprimez le code.
Documentez vos articles épinglés
Évitez les multiples articles épinglés
Testez les changements de thème sur un site de staging
Utilisez une extensionUn logiciel qui ajoute des fonctionnalités spécifiques à ... More d’articles épinglés
Pour un contrôle avancé, considérez :
Surveillez votre pageUn contenu statique (ex. : "À propos", "Contact") qui ne fa... More de blog après chaque mise à jour WordPress
La fonctionnalité des articles épinglés est simple mais fragile. La plupart des articles épinglés « cassés » ne le sont pas vraiment — ils sont simplement remplacés par un autre article épingléUn article épinglé en haut de la page du blog, qui prend l... More ou ignorés par un thème qui ne les supporte pas.
Rappelez-vous :
Quand votre article épingléUn article épinglé en haut de la page du blog, qui prend l... More se désépingle tout seul, commencez par la vérification la plus simple : quelqu’un (ou quelque chose) a-t-il défini un autre articleUn contenu dynamique et temporel (ex. : billets de blog) aff... More comme épinglé ? Neuf fois sur dix, c’est la réponse.