Ich habe einen benutzerdefinierten Beitragstyp "Nachrichten" auf meiner Wordpress-Site. Ich verwende das Plugin "Erweiterte benutzerdefinierte Felder", um jedem Beitrag Metadaten hinzuzufügen.
Ich möchte eine Reihe von Nachrichten als Archiv erstellen:
[2013]
[January] => 5
[2012]
[January] => 20
[February] => 10
[2011]
[April] => 30
Ich habe es geschafft, dies zum Laufen zu bringen mit:
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;
Ich muss in der Lage sein, mithilfe von http://example.com/news/2012/
und http://example.com/news/2012/10/
auf bestimmte Jahre und Monate zuzugreifen.
Ich habe versucht, das Plugin Custom Post Type Archives zu verwenden, aber wenn ich zu /news/2012/
gehe, wird die Standardnachrichtenliste ohne angewendeten Filter angezeigt.
Hier ist meine benutzerdefinierte Postleitzahl
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
)
);
Hier ist ein Beispiel, in dem add_rewrite_rule
verwendet wird, um Jahre und Monate für einen benutzerdefinierten Beitragstyp zu verarbeiten, bei dem news
der Slug ist. Besuchen Sie die Seite Settings > Permalinks
in admin, um die Überschreibungsregeln zu löschen, nachdem diese hinzugefügt wurden. Sie können auch dies in ein Plugin einfügen und die Regeln zur Aktivierung des Plugins neu schreiben .
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' );