Archives du type de message personnalisé par année et par mois?

16

Comment affichez-vous les archives d'un type de message personnalisé par année & Mois?

    
posée Dan Lee 16.11.2011 - 16:07

5 réponses

16

Oui, vous pouvez. Tout ce dont vous avez besoin est de créer un filtre pour wp_get_archives(); afin qu’il accepte le paramètre post_type :

function my_custom_post_type_archive_where($where,$args){  
    $post_type  = isset($args['post_type'])  ? $args['post_type']  : 'post';  
    $where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
    return $where;  
}

appelez ensuite ceci:

add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);

Chaque fois que vous souhaitez afficher l'archive par type de message personnalisé, transmettez simplement les arguments post_type:

$args = array(
    'post_type'    => 'your_custom_post_type',
    'type'         => 'monthly',
    'echo'         => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
    
réponse donnée takien 12.02.2012 - 18:04
6

La version officielle des développeurs de Wordpress indiquait que les types de publication personnalisés n'étaient pas destinés à faire le travail des publications ordinaires. Si vous avez besoin d'archives de publication de dates, etc., vous ne le ferez pas. les choses correctement, et vous feriez mieux d'utiliser des formats de publication, etc.

Les types de publication personnalisés sont destinés aux applications Web, etc., alors que vous devez définir un type de publication personnalisé qui agit en tant que blog secondaire ou parallèle avec un nom différent, par exemple. Le blog contre les nouvelles, avec les mêmes capacités, n’est pas ce à quoi la fonctionnalité était destinée, et signifierait d’autres problèmes techniques découlant de sa mise en œuvre.

Si vous insistez toujours sur ce point et que l'utilisation de taxonomies personnalisées et de formats de publication ne suffit pas, vous pouvez ajouter des règles de réécriture dans functions.php et rediriger les archives d'année / mois de certaines URL vers la page de publication de la publication, puis cocher sur la page de post-archivage personnalisée si vous avez spécifié des variables dans vos règles de réécriture et chargé un modèle différent, en vous assurant que vos règles de réécriture définissent les valeurs appropriées.

    
réponse donnée Tom J Nowell 16.11.2011 - 16:22
5

MODIFIER - > alors que cette réponse fonctionne toujours pour < WP4.4, car la prise en charge par 4.4 des types de publication personnalisés est maintenant incluse dans wp_get_archives()

Il existe enfin une solution simple, rapide et facile pour les archives de types de publications personnalisées basées sur la date dans WordPress! C’est un problème de longue date, enregistré ici dans le Trac de WP Core.

Cela n’a pas encore été résolu, mais l’un des contributeurs du Trac a posté un plugin simple dans GitHub. qui vous permettra d'avoir des archives datées pour les CPT.

Après avoir installé ce plugin ou ajouté le code de vos fonctions manuellement, vous pouvez utiliser des archives pour les CPT en tant que tels:

<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>

Notez que cette nouvelle fonction wp_get_archives_cpt fonctionne de la même manière que la norme wp_get_archives afin que vous puissiez utiliser n’importe quel des arguments ordinaires qu’elle accepte. Cependant, cela ajoute simplement la possibilité d'ajouter un argument de nom de type de publication personnalisé.

    
réponse donnée Trevor 02.01.2015 - 23:08
2

Pas assez de réputation pour ajouter ceci à la réponse de Taiken, désolé.

Cependant, je voulais ajouter que sa réponse fonctionnait pour moi, mais les liens étaient au format "localhost / date / 2010". Alors que j'avais besoin du format 'localhost / postslug / 2010'. J'ai pu résoudre ce problème en utilisant une chaîne replace sur la sortie de wp_get_archives.

Ainsi, en fonction de la configuration de vos permaliens, ce code résoudra le problème 404 et redirigera les liens vers la structure de permalien de type message personnalisé:

$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
    
réponse donnée mrbencowell 12.09.2013 - 10:58
1

Je ne peux pas ajouter au post de takien, alors voici ce que j'ai finalement dû faire:

functions.php

add_action('init', 'my_year_archive_rewrites');  
function my_year_archive_rewrites() {   
    add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
    add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}

add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){  
    $post_type = isset($args['post_type']) ? $args['post_type'] : 'post';  
    return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}

add_filter('year_link', 'my_year_link');
function my_year_link($link) {
    global $wp_rewrite;

    if(true) { // however you determine what archive you want
        $link = str_replace($wp_rewrite->front, '/resource/news/', $link);
    }

    return $link;
}

Appel de wp_get_archives ()

wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));
    
réponse donnée pkmatte 17.04.2014 - 18:06

Lire d'autres questions sur les étiquettes