Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a custom post type "news" in my Wordpress site. I am using Advanced Custom Fields plugin to add meta data to each post.

I want to create an array of news items as an archive:

[2013]
    [January] => 5
[2012]
    [January] => 20
    [February] => 10
[2011]
    [April] => 30

I managed to get this working using:

    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;

I need to be able to link to specific years and months using http://example.com/news/2012/ and http://example.com/news/2012/10/.

I tried using the plugin Custom Post Type Archives but when I goto /news/2012/ I get the standard news listing with no filter applied.

Here is my Custom Post Type Code

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
  )
);
share|improve this question
2  
I assume you're already using the built in Posts post type for something else? This is really what posts are set up for - monthly/yearly archives, and will "just work" without having to do anything further. If you want the same behavior for a custom post type, you will unfortunately have to generate your own rewrite rules, which is not so simple. –  Milo Jan 30 '13 at 16:59
    
Yes, posts is being used for blog posts currently. The news section is a custom post type. Do you have an example of the re-write rules I would need to use for year and month? –  dclawson Jan 30 '13 at 17:11

1 Answer 1

Here's an example using add_rewrite_rule to handle years and months for a custom post type where news is the slug. Visit the Settings > Permalinks page in admin to flush rewrite rules after this is added. You could also put this in a plugin and flush rewrite rules on plugin activation.

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' );
share|improve this answer
    
Thanks @Milo, I've applied the rewrite rules for this but when I access http://mysite.com/news/2012/ i get redirected to http://mysite.com/news/. Can't figure out what the problem is. I should probably mention that I am using Roots WP framework also. I've had a look through but can't find anything that would be causing this. –  dclawson Jan 30 '13 at 17:38
    
Same happens when I goto: http://mysite.com/index.php?post_type=news&year=2012&monthnum=10 –  dclawson Jan 30 '13 at 17:46
    
what does your post type registration code look like? try it in twentytwelve to determine if it's theme-related. –  Milo Jan 30 '13 at 17:52
    
It' seems the issue is to do with the roots_nice_search_redirect function in WP Roots. I will amend this function and post the result here. Thank You Milo, your htaccess rules were correct. –  dclawson Jan 30 '13 at 18:07

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.