J'ai un type de message personnalisé "news" sur mon site Wordpress. J'utilise le plugin Advanced Custom Fields pour ajouter des métadonnées à chaque message.
Je veux créer un tableau de nouvelles sous forme d'archive:
[2013]
[January] => 5
[2012]
[January] => 20
[February] => 10
[2011]
[April] => 30
J'ai réussi à faire fonctionner ça en utilisant:
global $wpdb;
$news = $wpdb->get_results(
"SELECT wp_posts.post_date, COUNT(wp_posts.ID) as count
FROM $wpdb->posts
WHERE
wp_posts.post_type = 'news' AND
wp_posts.post_status = 'publish' AND
wp_posts.post_date <= CURDATE() AND
wp_posts.post_date >= DATE_SUB(CURDATE(), INTERVAL 3 YEAR)
GROUP BY YEAR(wp_posts.post_date), MONTH(wp_posts.post_date)
ORDER BY wp_posts.post_date DESC",
ARRAY_A);
$archive = array();
foreach ($news as $post):
$year = date('Y', strtotime($post['post_date']));
$month = date('m', strtotime($post['post_date']));
$month_name = date('F', strtotime($post['post_date']));
$post['url'] = 'NOT SURE ABOUT URL';
$archive[$year][$month_name] = $post;
endforeach;
Je dois pouvoir établir un lien avec des années et des mois spécifiques en utilisant http://example.com/news/2012/
et http://example.com/news/2012/10/
.
J'ai essayé d'utiliser le plugin Custom Post Type Archives mais quand je vais à /news/2012/
je reçois la liste de nouvelles standard sans filtre appliqué.
Voici mon code de type de message personnalisé
register_post_type('news',
array(
'label' => 'News',
'description' => 'Latest News',
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'hierarchical' => true,
'rewrite' => array('slug' => '','with_front' => '1'),
'query_var' => true,
'has_archive' => true,
'menu_position' => 120,
'menu_icon' => /assets/img/icon-custom.png
)
);
Voici un exemple utilisant add_rewrite_rule
pour gérer des années et des mois pour un type de publication personnalisé où news
est le slug. Visitez la page Settings > Permalinks
dans admin pour effacer les règles de réécriture après leur ajout. Vous pouvez également mettre ceci dans un plugin et effacer les règles de réécriture lors de l'activation du plugin .
function wpa83797_news_rewrite_rules(){
add_rewrite_rule(
'news/([0-9]{4})/([0-9]{1,2})/?$',
'index.php?post_type=news&year=$matches[1]&monthnum=$matches[2]',
'top'
);
add_rewrite_rule(
'news/([0-9]{4})/?$',
'index.php?post_type=news&year=$matches[1]',
'top'
);
}
add_action( 'init', 'wpa83797_news_rewrite_rules' );