Ajouter un custom post type à la fonction wp_get_archives
Par défaut la fonction wp_get_archives() de WordPress ne prend pas en compte les Custom Post Type. Découvrez comment un ajouter un Custom Post Type cette fonction.
La fonction wp_get_archives()
de WordPress permet de récupérer une liste basée sur la date des archives. Par défaut, la fonction affiche toutes les dates des articles de type “Post” sur une même page.
Pour ajouter un ou plusieurs custom post type à ces archives, nous allons changer le filtre getarchives_where qui permet de modifier le comportement de la requête SQL de la fonction wp_get_archives()
.
Copier le code suivant dans le fichier functions.php
de votre thème et remplacer CUSTOM_POST_TYPE_NAME
de la ligne 5 par le ou les slugs de vos custom post type :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]
function gkp_get_archives_with_ctp( $where , $r ) {
$args = array( 'public' => true , '_builtin' => false );
$output = 'names'; $operator = 'and';
$post_types = get_post_types( $args , $output , $operator );
$post_types = array_merge( $post_types , array( 'post','CUSTOM_POST_TYPE_NAME' ) );
$post_types = "'" . implode( "' , '" , $post_types ) . "'";
return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where );
}
add_filter( 'getarchives_where' , 'gkp_get_archives_with_ctp',10 , 2);
[/pastacode]
Source : WP-Snipp
3 Commentaires
Je n’arrive pas à faire fonctionner cette astuce qui me serai pourtant fort utile. J’ai pourtant juste fait un copié/collé en rajoutant le nom de mon CPT, voici le code :
J’ai tenté avec des orthographes différentes, nom slug (‘editos’,’Editos’,’Éditos’,’éditos’,’edito’,’Edito’,’Édito’) ça n’a jamais fonctionné. Quelqu’un à-t-il testé l’astuce?
Pour info je suis sur wordpress 3.3.1.
Jonathan, tu ne vois pas d’ou ça peut venir?
Cordialement,
Yannick
@Yannick : ça vient peut-être de la déclaration du custom post type qui n’est pas bonne.
Tu veux dire, lorsque j’ai créé mon CPT? Pourtant Il fonctionne bien, et dans l’admin, et à l’affichage. Comme cité ci dessus j’ai testé le nom, le slug. La je viens de tester avec un autre CPT que je voulais pas entrer dans les archives (pour tester), mais toujours rien, ça doit venir d’ailleurs.
Il n’y aurai pas des espaces en trop ou des fautes de syntaxe?