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]
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.
19 Commentaires
Ce code tombe pile au bon moment. Je rajouterais juste que l’on peut ajouter le textdomain pour la traduction des chaînes.
Merci de ce hack !
@Aurélien: Pas besoin de textdomain, c’est une chaîne traduite en natif par WordPress :)
Ouais mais elle ne me plait pas moi… je veux mettre le nom du CPT :p
@Aurélien: Ah oui, c’est vrai que ça serait plus sexy avec la personnalisation de la chaîne en fonction du CPT.
pour l’avoir essayé, c’est un bon plan qui fonctionne pas mal
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.
pour l’avoir essayé, Merci
Merci !
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
@Erick : Je ne connais pas le plugin event organiser . À vous de tester pour voir ;)
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 ^^.
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.
ça fonctionne très bien merci
Thanks a lot, exactly what I was looking for. Code is simple and short, explanations are clear and no plugin is required, bonbon! Merci!!!
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
Merci pour ce code bien simple surtout comme je déteste le codage, je vais l’essayer pour mieux voir son impact.
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
Merci beaucoup !
Merci beaucoup pour le partage de ce code
Je trouve tous tes articles très intéressants