私のWordpressサイトにはカスタム投稿タイプ "news"があります。各投稿にメタデータを追加するために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
)
);
これは add_rewrite_rule
を使用してカスタム投稿タイプの年と月を処理する例です。ここでnews
はスラッグです。これが追加された後に書き換え規則をフラッシュするためにadminの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' );