Comment afficher les archives d'un type de message personnalisé par année et mois?
Comment afficher les archives d'un type de message personnalisé par année et mois?
Réponses:
Oui, vous pouvez. Il vous suffit de créer un filtre pour wp_get_archives();
qu'il accepte le post_type
paramètre:
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;
}
puis appelez ceci:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Chaque fois que vous souhaitez afficher l'archive par type de publication personnalisé, passez simplement les arguments post_type:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Ensuite, il pourrait être possible en utilisant un crochet similaire à ci-dessus, de modifier les liens pour commencer au /%category%/
lieu de simplement la date.
mysite.com/2013/04
mais cela conduit à un 404. Le type de publication personnalisé est disponible à: mysite.com/cats
ce qui me fait penser mysite.com/cats/2013/04
que ce devrait être le lien, mais cela se résout également en 404. Comment obtenez-vous les liens d'archive pour fonctionner?
Vous ne le faites pas, la ligne officielle des développeurs Wordpress était que les types de publication personnalisés n'étaient pas destinés à faire le travail des publications ordinaires normales, et que si vous avez besoin d'archives de publication de dates, etc., vous ne faites 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 faire quelque chose comme la configuration d'un type de publication personnalisé qui agit comme un blog secondaire ou parallèle avec un nom différent, par exemple blog vs news, avec les mêmes capacités, n'est pas ce que la fonctionnalité était destiné à, et signifierait d'autres problèmes techniques découlant de sa mise en œuvre.
Si vous insistez toujours là-dessus, et qu'il ne suffit pas d'utiliser des taxonomies et des formats de publication personnalisés, vous pouvez ajouter des règles de réécriture dans functions.php et rediriger les archives année / mois de certaines URL vers la page d'archivage des publications, puis vérifier la personnalisation publier une page d'archivage si vous avez spécifié des variables dans vos règles de réécriture et charger un modèle différent, en vous assurant dans vos règles de réécriture de définir les valeurs appropriées.
ÉDITER -> alors que cette réponse fonctionne toujours pour <WP4.4, car la prise en charge de 4.4 pour les types de publication personnalisés est désormais incluse danswp_get_archives()
Il existe enfin une solution simple, rapide et facile pour les archives basées sur la date des types de publication personnalisés dans WordPress! Il s'agit d'un problème de longue date qui est enregistré ici dans le WP Core Trac.
Il n'a pas encore été résolu, mais l'un des contributeurs au Trac a publié un simple plugin dans GitHub qui vous permettra d'avoir des archives basées sur la date pour les CPT.
Après avoir installé ce plugin ou ajouté manuellement le code de vos fonctions, vous devez utiliser les archives pour les CPT en tant que telles:
<?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
, vous pouvez donc utiliser n'importe quel argument régulier qu'elle accepte. Cependant, cela ajoute simplement la possibilité pour vous d'être en mesure d'ajouter un argument de nom de type de publication personnalisé.
Pas assez de réputation pour ajouter ceci à la réponse de taiken désolé.
Cependant, je voulais ajouter que sa réponse a fonctionné 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 un remplacement de chaîne sur la sortie de wp_get_archives.
Donc, selon la façon dont vos permaliens sont définis, ce code résoudra le problème 404 et redirigera les liens vers la structure de permalien de type de 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);
Je ne peux pas ajouter au post de takien alors voici ce que j'ai fini par 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'));