X

Cum să formatați frumos arhivele pe lună, separate pe ani

Fragmente de IsItWP

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 = '&nbsp;('.$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.

Comentarii   Lasă un răspuns

  1. Lucrare grozavă, dragă..
    poți să-mi spui cum să afișez numărul de postări pe luni?
    acum afișează numele lunilor

  2. Cum să elimin luna recentă a anului din aceste pluginuri?

  3. Cristian Florescu October 9, 2018 at 8:40 pm

    $temp_year nu este definit 😉

  4. Cod grozav! Mulțumesc mult, omule!

    1. Nicio problemă, mă bucur că am putut ajuta!

  5. Cod grozav! Mulțumesc mult, omule!

  6. Cod grozav! Mulțumesc mult, omule!

  7. 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ță :)

    1. post_type este definit aici, „WHERE post_type = ‘post'”

  8. Acesta este un exemplu foarte bun. Mulțumesc, acum, este posibil să încarc lunile unei categorii specifice?

  9. Jony Fernando Schulz March 27, 2013 at 12:54 pm

    Foarte frumos. Grozav. Mulțumesc!

  10. Uau. Aceasta este o soluție grozavă fără un plugin. Funcționează perfect. Mulțumesc pentru secțiunea de cod

  11. Exact ceea ce aveam nevoie, ar trebui să fie inclus în nucleul wordpress, este atât de bun

  12. Soluție grozavă, mulțumesc :)

  13. 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

  14. Ș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?

    1. 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.

    2. Dacă încă te întrebi, am postat cod modificat mai sus (29.05.2017) care permite filtrarea pe categorii.

Adaugă un comentariu

Suntem bucuroși că ați ales să lăsați un comentariu. Vă rugăm să rețineți că toate comentariile sunt moderate conform politicii noastre de confidențialitate, iar toate linkurile sunt nofollow. NU folosiți cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.

Lista de verificare pentru lansarea WordPress

Lista de verificare finală pentru lansarea WordPress

Am compilat toate elementele esențiale de verificare pentru lansarea următorului dvs. site WordPress într-o singură carte electronică la îndemână.
Da, trimite-mi eBook-ul gratuit!