Tout savoir sur WordPress
Tutoriel WordPress

Ajouter les sticky posts aux Custom Post Types

Par défaut, la fonctionnalité des Sticky Posts est seulement disponible pour les articles. Découvrez comment étendre cette option aux Custom Post Types.

En français, les Sticky Posts correspondent aux articles mis en avant. C’est une fonctionnalité utile pour faire automatiquement remonter des articles en premier sur la page d’accueil ou les pages d’archives de votre site.

Par défaut, ce paramètre est disponible uniquement pour les articles, à partir de la page d’édition, en cochant « mettre en avant un article sur la page d’accueil » dans l’espace de rédaction (Publier > Visibilité).

Pour diverses raisons, il n’est pas possible d’activer cette option pour les pages et les Custom Post Types.

Grâce au plugin Sticky Custom Post Types, on peut ajouter une Metabox simulant l’option. Cette technique n’est pas très intuitive pour les clients qui s’attendent à retrouver la case à cocher au même endroit que les articles.

Pour palier à ce problème, nous allons “copier” la fonctionnalité en l’ajoutant à l’aide de JavaScript. À ce jour, c’est la seule solution pour ajouter le support des Sticky Posts comme à son origine. Il n’existe pas (et n’existera pas) de hooks pour assurer la compatibilité avec les Custom Post Types.

Pour ajouter cette fonctionnalité, il vous suffit de copier le code ci-dessous dans le fichier functions.php de votre thème :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


add_action( 'admin_footer-post.php', 'gkp_add_sticky_post_support' );
add_action( 'admin_footer-post-new.php', 'gkp_add_sticky_post_support' );
function gkp_add_sticky_post_support() 
{ global $post, $typenow; ?>
	
	<?php if ( $typenow == 'SLUG-CPT' && current_user_can( 'edit_others_posts' ) ) : ?>
	<script>
	jQuery(function($) {
		var sticky = "<br/><span id='sticky-span'><input id='sticky' name='sticky' type='checkbox' value='sticky' <?php checked( is_sticky( $post->ID ) ); ?> /> <label for='sticky' class='selectit'><?php _e( "Stick this post to the front page" ); ?></label><br /></span>";	
		$('[for=visibility-radio-public]').append(sticky);	
	});
	</script>
	<?php endif; ?>
	
<?php
}

[/pastacode]

La case à cocher sera disponible grâce à ce code.
La case à cocher sera disponible grâce à ce code.

Pour plus d’informations sur la mise en avant des articles, je vous recommande de lire notre guide dédié aux Sticky Posts de WordPress.

PS : n’oubliez pas de modifier SLUG-CPT par la valeur du slug de votre Custom Post Type.

Cet article a été mis à jour il y a 3978 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

19 Commentaires

  1. @Aurélien: Ah oui, c’est vrai que ça serait plus sexy avec la personnalisation de la chaîne en fonction du CPT.

  2. Merci pour la ressource :) ! Personnellement je ne m’en suis pas servi avec le jQuery, mais je l’ai inclus à la metabox de mon CPT, c’est bien mieux pour l’UI je trouve.

  3. Bonjour je me permet de vous contacter suite a ces lignes de code; en effet j’utilise le plugin “event organiser” qui utilise les custom post type et je voulais savoir si cela me permettra de mettre en avant un événement creer par ce plugin ?
    Je vous remercie d’avance pour le temps accorder à ma question
    Cordialement

  4. @Erick : Je ne connais pas le plugin event organiser . À vous de tester pour voir ;)

  5. Ben après test …. ça marche pô.
    Et après avoir essayer deux ou trois plugins (dont Sticky Custom Post Types)
    ça marche toujours pô.
    Tant pis. Je garde l’astuce pour quand je saurais me service correctement des Custom Post Types ^^.

  6. Depuis tout ce temps que je cherchais à mettre ces sticky post sur mon blog en vain. Un grand merci à vous. Je vais essayer de mettre ça en pratique pour voir.

  7. Thanks a lot, exactly what I was looking for. Code is simple and short, explanations are clear and no plugin is required, bonbon! Merci!!!

  8. Une très bonne méthode que je viens de découvrir pour améliorer la visibilité de mes articles. Vraiment très pratique avec ce plugin Sticky Custom Post Types, je vais bien essayer :)

    Merci pour l’astuce

  9. Merci pour ce code bien simple surtout comme je déteste le codage, je vais l’essayer pour mieux voir son impact.

  10. Une bonne nouvelle information, un astuce très pratique pour améliorer la visibilité de mes articles voyages et découverte de mon blog.

    Le code est bien clair, je vais bien tester cette bonne méthode.

    Intéressant article