Căutați o modalitate de a afișa o listă de arhive frumos formatată de luni, separate pe ani? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a afișa arhivele formatate pe luni, separate pe ani în WordPress.
Instrucțiuni:
Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:
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;
}
Adăugați această secțiune în fișierul dvs. index.php sau în orice alt fișier de șablon unde doriți să afișați arhivele formatate.
<?php
wp_custom_archive();
?>
Notă: Dacă este prima dată când adăugați secvențe de cod în WordPress, consultați ghidul nostru despre cum să copiați / lipiți corect secvențe de cod în WordPress, pentru a nu vă defecta accidental site-ul.
Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare să consultați și celelalte articole ale noastre de pe site, cum ar fi: 9 cele mai bune pluginuri de licitații WordPress și cum să creați un formular de trimitere a postărilor invitate în WordPress.
Lucrare grozavă, dragă..
poți să-mi spui cum să afișez numărul de postări pe luni?
acum afișează numele lunilor
Cum să elimin luna recentă a anului din aceste pluginuri?
$temp_year nu este definit 😉
Cod grozav! Mulțumesc mult, omule!
Nicio problemă, mă bucur că am putut ajuta!
Cod grozav! Mulțumesc mult, omule!
Cod grozav! Mulțumesc mult, omule!
Cod grozav. Exact ceea ce căutam. Știi, cumva, cum să-l rafinezi pentru a extrage doar un tip de postare personalizat? *aștept cu speranță :)
post_type este definit aici, „WHERE post_type = ‘post'”
Acesta este un exemplu foarte bun. Mulțumesc, acum, este posibil să încarc lunile unei categorii specifice?
Foarte frumos. Grozav. Mulțumesc!
Uau. Aceasta este o soluție grozavă fără un plugin. Funcționează perfect. Mulțumesc pentru secțiunea de cod
Exact ceea ce aveam nevoie, ar trebui să fie inclus în nucleul wordpress, este atât de bun
Soluție grozavă, mulțumesc :)
Dragă Kevin,
Greu de înțeles scriptul tău. Ai dori să-l atașezi cu un tabel în baza de date MySql? Poate va fi mai clar pentru mine, deoarece sunt nou în PHP. Mulțumesc
Știu că aceasta este o postare veche. Dar există vreo modalitate de a specifica categoria listei de arhive? Preferabil prin transmiterea valorii din eticheta wp_custom_archive. Astfel încât aș putea pune mai multe liste de arhive pe o pagină. vreau o listă de arhive pentru categoria 9 și o listă de arhive separată pentru categoria 4. Astfel încât eticheta ar fi ceva de genul wp_custom_archive(‘9’) și wp_custom_archive(‘4’).
Orice ajutor?
hhhmmm Salut John, există multe pluginuri de arhivare care ar putea fi o soluție mai bună atunci când vrei să intri în detalii cu arhivele tale.
Dacă încă te întrebi, am postat cod modificat mai sus (29.05.2017) care permite filtrarea pe categorii.