Suchen Sie nach einer Möglichkeit, eine schön formatierte Archivliste von Monaten, getrennt nach Jahren, anzuzeigen? Es gibt wahrscheinlich ein Plugin dafür, aber wir haben einen schnellen Code-Schnipsel erstellt, den Sie verwenden können, um formatierte Archive nach Monat, getrennt nach Jahr, in WordPress anzuzeigen.
Anweisungen:
Sie müssen diesen Code nur zur functions.php-Datei Ihres Themes oder in ein websitespezifisches Plugin einfügen:
function wp_custom_archive($args = '') {
global $wpdb, $wp_locale;
$defaults = array(
'limit' => '',
'format' => 'html', 'before' => '',
'after' => '', 'show_post_count' => false,
'echo' => 1
);
$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
if ( '' != $limit ) {
$limit = absint($limit);
$limit = ' LIMIT '.$limit;
}
// over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride
$archive_date_format_over_ride = 0;
// options for daily archive (only if you over-ride the general date format)
$archive_day_date_format = 'Y/m/d';
// options for weekly archive (only if you over-ride the general date format)
$archive_week_start_date_format = 'Y/m/d';
$archive_week_end_date_format = 'Y/m/d';
if ( !$archive_date_format_over_ride ) {
$archive_day_date_format = get_option('date_format');
$archive_week_start_date_format = get_option('date_format');
$archive_week_end_date_format = get_option('date_format');
}
//filters
$where = apply_filters('customarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r );
$join = apply_filters('customarchives_join', "", $r);
$output = '<ul>';
$query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC $limit";
$key = md5($query);
$cache = wp_cache_get( 'wp_custom_archive' , 'general');
if ( !isset( $cache[ $key ] ) ) {
$arcresults = $wpdb->get_results($query);
$cache[ $key ] = $arcresults;
wp_cache_set( 'wp_custom_archive', $cache, 'general' );
} else {
$arcresults = $cache[ $key ];
}
if ( $arcresults ) {
$afterafter = $after;
foreach ( (array) $arcresults as $arcresult ) {
$url = get_month_link( $arcresult->year, $arcresult->month );
/* translators: 1: month name, 2: 4-digit year */
$text = sprintf(__('%s'), $wp_locale->get_month($arcresult->month));
$year_text = sprintf('<li>%d</li>', $arcresult->year);
if ( $show_post_count )
$after = ' ('.$arcresult->posts.')' . $afterafter;
$output .= ( $arcresult->year != $temp_year ) ? $year_text : '';
$output .= get_archives_link($url, $text, $format, $before, $after);
$temp_year = $arcresult->year;
}
}
$output .= '</ul>';
if ( $echo )
echo $output;
else
return $output;
}
Fügen Sie diesen Schnipsel in Ihre index.php-Datei oder eine andere Vorlagendatei ein, in der Sie die formatierten Archive anzeigen möchten.
<?php
wp_custom_archive();
?>
Hinweis: Wenn Sie zum ersten Mal Code-Schnipsel in WordPress hinzuf ilde{A}gen, lesen Sie bitte unseren Leitfaden, wie Sie Code-Schnipsel richtig in WordPress kopieren / einf ilde{A}gen, damit Sie Ihre Website nicht versehentlich besch ilde{A}digen.
Wenn Ihnen dieser Code-Schnipsel gefallen hat, ziehen Sie bitte in Betracht, unsere anderen Artikel auf der Website zu lesen, wie z. B.: 9 beste WordPress-Auktions-Plugins und wie man ein Gastbeitrags-Einreichungsformular in WordPress erstellt.
Tolle Arbeit, mein Lieber.. Können Sie mir bitte sagen, wie ich die Anzahl der Beiträge nach Monaten anzeigen kann? Im Moment werden die Monatsnamen angezeigt
Wie kann ich den letzten Monat des Jahres in diesen Plugins entfernen?
$temp_year nicht definiert 😉
Genialer Code! Vielen Dank, Mann!
Kein Problem, gerne geschehen!
Genialer Code! Vielen Dank, Mann!
Genialer Code! Vielen Dank, Mann!
Genialer Code. Genau das, was ich gesucht habe. Wissen Sie vielleicht, wie man ihn verfeinert, um nur einen benutzerdefinierten Beitragstyp abzurufen? *hoffnungsvoll wartend 🙂
post_type ist hier definiert, „WHERE post_type = ‘post‘“
Das ist ein sehr gutes Beispiel. Danke, jetzt ist es möglich, Monate einer bestimmten Kategorie zu laden?
Sehr schön. Großartig. Danke!
Wow. Das ist eine großartige Lösung ohne Plugin. Funktioniert perfekt. Danke für den Snippet
Genau das, was ich brauchte, das sollte in den WordPress-Kern integriert werden, es ist so gut
Großartige Lösung, danke 🙂
Lieber Kevin,
Es ist schwer, dein Skript zu verstehen. Möchtest du es mit einer Tabelle in der MySQL-Datenbank anhängen? Vielleicht ist es für mich klarer, weil ich neu in PHP bin. Danke
Ich weiß, dass dies ein alter Beitrag ist. Aber gibt es eine Möglichkeit, die Kategorie der Archivliste anzugeben? Vorzugsweise durch Übergabe des Werts vom wp_custom_archive-Tag. Damit ich mehrere Archivlisten auf einer Seite platzieren könnte. Ich möchte eine Archivliste für Kategorie 9 und eine separate Archivliste für Kategorie 4. Damit der Tag so etwas wie wp_custom_archive(‘9’) und wp_custom_archive(‘4’) wäre.
Irgendeine Hilfe?
hhhmmm Hallo John, es gibt viele Archiv-Plugins, die eine bessere Lösung sein könnten, wenn du so detailliert mit deinen Archiven umgehen möchtest.
Falls du dich immer noch fragst, ich habe oben einen modifizierten Code gepostet (29.05.2017), der das Filtern nach Kategorie ermöglicht.