Tout savoir sur WordPress
Tutoriel WordPress

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 :

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);

Source : WP-Snipp

Cet article a été mis à jour il y a 2496 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.

3 Commentaires

  1. 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 :

    function 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','editos' ) );
    	$post_types = "'" . implode( "' , '" , $post_types ) . "'";
    	return str_replace( "post_type = 'post'" , "post_type IN ( $post_types )" , $where );
    }
    add_filter( 'getarchives_where' , 'get_archives_with_ctp',10 , 2);
    

    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

  2. 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?

sed quis dolor Lorem felis Aliquam neque. massa Phasellus ut