Пользовательский тип почтового типа в месяц /месяц

У меня есть пользовательские сообщения типа «новости» на моем сайте 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
  )
);
7 голосов | спросил dclawson 30 Jpm1000000pmWed, 30 Jan 2013 20:49:04 +040013 2013, 20:49:04

1 ответ


5

Вот пример, используя 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' );
ответил Milo 30 Jpm1000000pmWed, 30 Jan 2013 21:29:58 +040013 2013, 21:29:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132