我的 WordPress 站点中有一个自定义帖子类型“新闻”。 我正在使用 Advanced Custom Fields 插件向每个帖子添加元数据。
我想创建一个新闻项目数组作为存档:
[2013]
[January] => 5
[2012]
[January] => 20
[February] => 10
[2011]
[April] => 30
我设法让这个工作使用:
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;
我需要能够链接到特定的年份和月份 http://example.com/news/2012/
和 http://example.com/news/2012/10/
.
我尝试使用插件 Custom Post Type Archives 但是当我转到 /news/2012/
我得到了没有应用过滤器的标准新闻列表。
这是我的自定义帖子类型代码
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
)
);
这是一个使用的例子 add_rewrite_rule
处理自定义帖子类型的年份和月份,其中 news
是鼻涕虫。 参观 Settings > Permalinks
添加后,管理页面刷新重写规则。 您也可以将其放入插件中并在插件激活时刷新重写规则。
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' );
