Je m'attendais à ce que wp3.1 avec le support de archive- {post_type} .php résolve mes problèmes. Cependant, j'ai encore du mal à le faire fonctionner.
Ce que je veux, c'est: une page d'archive personnalisée par type de publication, basée sur la date, qui affiche les années et les mois. Une fois que vous avez cliqué sur une année du mois, vous accédez à une autre page d'archives qui affiche les articles pertinents.
Tout d'abord: je ne sais pas du tout comment créer une page d'archive basée sur la date pour certains types de publications. Existe-t-il un certain modèle de page qui est automatiquement appelé lorsqu’on accède à {post-type}/archive? <?php wp_get_archives(); ?>
ne semble pas prendre en compte le type.
Deuxièmement, mes permaliens basés sur les dates ne fonctionnent pas. Un simple {post-type}/2010/01 donne une erreur404. J'ai créé toutes mes pages archive-.php avec un contenu simple:
get_header(); ?>
<section id="content" class="hfeed">
<?php get_template_part('posts'); ?>
</section>
<?php get_footer(); ?>
Un indice?
Avez-vous ajouté 'has_archive => 'my_slug'
à vos arguments register_post_type()
? Cela devrait au moins vous aider avec votre deuxième problème.
Le problème que je pense que vous rencontrez est que WordPress ne touche pas ses balises intégrées telles que date et postname lorsque vous utilisez des types de publication personnalisés. Essayez d’utiliser ce code, qui se trouve ici :
/ Add filter to plugin init function
add_filter('post_type_link', 'translate_permalink', 10, 3);
// Adapted from get_permalink function in wp-includes/link-template.php
function translate_permalink($permalink, $post_id, $leavename) {
$post = get_post($post_id);
$rewritecode = array(
'%year%',
'%monthnum%',
'%day%',
'%hour%',
'%minute%',
'%second%',
$leavename? '' : '%postname%',
'%post_id%',
'%category%',
'%author%',
$leavename? '' : '%pagename%',
);
if ( '' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft')) ) {
$unixtime = strtotime($post->post_date);
$category = '';
if ( strpos($permalink, '%category%') !== false ) {
$cats = get_the_category($post->ID);
if ( $cats ) {
usort($cats, '_usort_terms_by_ID'); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent )
$category = get_category_parents($parent, false, '/', true) . $category;
}
// show default category in permalinks, without
// having to assign it explicitly
if ( empty($category) ) {
$default_category = get_category( get_option( 'default_category' ) );
$category = is_wp_error( $default_category ) ? '' : $default_category->slug;
}
}
$author = '';
if ( strpos($permalink, '%author%') !== false ) {
$authordata = get_userdata($post->post_author);
$author = $authordata->user_nicename;
}
$date = explode(" ",date('Y m d H i s', $unixtime));
$rewritereplace =
array(
$date[0],
$date[1],
$date[2],
$date[3],
$date[4],
$date[5],
$post->post_name,
$post->ID,
$category,
$author,
$post->post_name,
);
$permalink = str_replace($rewritecode, $rewritereplace, $permalink);
} else { // if they're not using the fancy permalink option
}
return $permalink;
}
C'est un filtre qui est normalement intégré et appelé dans Wordpress lorsqu'il traite des publications, mais n'est pas appelé pour les types de publication personnalisés. Fondamentalement, il gère les balises utilisées avec des permaliens. Ce code devrait vous permettre d'utiliser des dates pour votre CPT.