Benutzerdefinierte Post-Typ jährliche / monatliche Archiv-Permalinks


7

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, indem ich:

    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, mit http://example.com/news/2012/und auf bestimmte Jahre und Monate zu verlinken http://example.com/news/2012/10/.

Ich habe versucht, das Plugin Custom Post Type Archives zu verwenden, aber wenn /news/2012/ich dazu komme, erhalte ich die Standardnachrichtenliste ohne Filter.

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
  )
);

2
Ich nehme an, Sie verwenden den integrierten PostsPost-Typ bereits für etwas anderes? Dies ist wirklich das, wofür Posts eingerichtet sind - monatliche / jährliche Archive, und "funktionieren" einfach, ohne dass Sie etwas weiter tun müssen. Wenn Sie dasselbe Verhalten für einen benutzerdefinierten Beitragstyp wünschen, müssen Sie leider Ihre eigenen Umschreiberegeln generieren, was nicht so einfach ist.
Milo

Ja, Beiträge werden derzeit für Blog-Beiträge verwendet. Der Nachrichtenbereich ist ein benutzerdefinierter Beitragstyp. Haben Sie ein Beispiel für die Regeln zum erneuten Schreiben, die ich für yearund verwenden müsste month?
Dclawson

Antworten:


7

Hier ist ein Beispiel add_rewrite_rulefür die Behandlung von Jahren und Monaten für einen benutzerdefinierten Beitragstyp, bei dem newses sich um die Schnecke handelt. Besuchen Sie die Settings > PermalinksSeite in admin, um die Umschreiberegeln zu löschen, nachdem diese hinzugefügt wurden. Sie können dies auch in ein Plugin einfügen und die Regeln für die 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' );

Danke @Milo, ich habe die Umschreiberegeln dafür angewendet, aber wenn ich darauf zugreife, werde http://mysite.com/news/2012/ich zu weitergeleitet http://mysite.com/news/. Ich kann nicht herausfinden, wo das Problem liegt. Ich sollte wahrscheinlich erwähnen, dass ich auch das Roots WP-Framework verwende. Ich habe mich umgesehen, kann aber nichts finden, was dies verursachen würde.
Dclawson

Gleiches passiert, wenn ich http://mysite.com/index.php?post_type=news&year=2012&monthnum=10
gehe zu

Wie sieht Ihr Registrierungscode für den Post-Typ aus? Probieren Sie es in zweiundzwanzig aus, um festzustellen, ob es themenbezogen ist.
Milo

Es scheint, dass das Problem mit der roots_nice_search_redirectFunktion in WP Roots zu tun hat . Ich werde diese Funktion ändern und das Ergebnis hier veröffentlichen. Danke Milo, deine Zugangsregeln waren korrekt.
Dclawson
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.