Verwenden von Shortcode zum Abrufen der Archivliste, getrennt nach Jahr

Hier ist Code, den ich geändert habe, um eine Archivliste von jedem Monat anzuzeigen, in dem ich Neuigkeiten gepostet habe. Jeder Monat verlinkt natürlich auf das Archiv für diesen Monat. Ich kann dann den Shortcode einfügen, wo immer ich möchte.

function my_archives($params, $content = null) { extract(shortcode_atts(array( 'type' => 'style1' ), $params)); ob_start(); ?>  'monthly' ) ); ?> <?php return ob_get_clean(); } add_shortcode('archives','my_archives'); 

Ich kann jedoch nicht herausfinden, wie ich auf der Seite wp_get_archives ( http://codex.wordpress.org/Function_Reference/wp_get_archives ) die Liste der Monate mit, sagen wir, einem Jahr, organisieren kann. Also, der obige Code gibt folgendes aus:

 
  • June 2014
  • May 2014
  • April 2014
  • etc. etc. etc. for every year and month (my website has been up for 11 years, so that's over 100 links in one blob of a list).

    Ich habe mich gefragt, ob es überhaupt möglich ist, die Liste stattdessen in eine solche zu ändern:

     2014
    • June 2014
    • May 2014
    • etc.
    2013
    • December 2014
    • November 2014
    • etc.

    Vielen Dank!

    Solutions Collecting From Web of "Verwenden von Shortcode zum Abrufen der Archivliste, getrennt nach Jahr"

    Ich habe diese Antwort gefunden: http://www.stemlegal.com/strategyblog/2011/wordpress-wednesdays-better-archive-lists-in-wordpress/

    Und der endgültige Code sieht ungefähr so ​​aus:

     function getarchives_filter($where, $args) { if (isset($args['year'])) { $where .= ' AND YEAR(post_date) = ' . intval($args['year']); } return $where; } add_filter('getarchives_where', 'getarchives_filter', 10, 2); function my_archives($params, $content = null) { extract(shortcode_atts(array( 'type' => 'style1' ), $params)); $currentyear = date('Y'); $years = range('2012',$currentyear); foreach($years as $year){ $archive = wp_get_archives( array( 'type' => 'monthly','echo' => 0 ,'year' => $year) ); if(!empty($archive)){ echo '
      '; echo '
    • '.$year.'
    • '; echo $archive; echo '
    '; } } } add_shortcode('archives','my_archives');

    Dies ergibt Monate mit einer Jahresüberschrift. 11 Jahre ist viel, in der Vergangenheit habe ich eine einfache jQuery .slideToggle () hinzugefügt, wobei wenn ein Benutzer auf ein Jahr klickt, sie dann die Liste der Monate für dieses Jahr bekommen. Nur ein Vorschlag.

      < ?php $years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date DESC"); foreach($years as $year) { ?> < ?php echo $year; ?> < ?php $months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND YEAR(post_date) = '".$year."' ORDER BY post_date DESC"); foreach($months as $month) { ?> < ?php echo date( 'F', mktime(0, 0, 0, $month) );?> < ?php } ?> < ?php } ?>