Пользовательский тип почтового типа в месяц /месяц
У меня есть пользовательские сообщения типа «новости» на моем сайте 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/
.
Я попытался использовать плагин Архивы типа пользовательских сообщений , но когда я перешел /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
)
);
1 ответ
Вот пример, используя add_rewrite_rule
обрабатывать годы и месяцы для настраиваемого типа сообщений, где news
- это пуля. Перейдите на страницу Settings > Permalinks
в admin, чтобы сбросить правила перезаписи после добавления. Вы также можете поместить это в плагин и flush rewrite правила активации плагина .
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' );