WordPress.org

Make WordPress Core

Ticket #23206: 23206.diff

File 23206.diff, 8.7 KB (added by ryan, 5 years ago)
  • wp-includes/general-template.php

     
    912912                $archive_week_end_date_format = get_option('date_format');
    913913        }
    914914
    915         //filters
    916915        $where = apply_filters( 'getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r );
    917916        $join = apply_filters( 'getarchives_join', '', $r );
    918917
    919918        $output = '';
    920919
     920        $last_changed = wp_cache_get( 'last_changed', 'posts' );
     921        if ( ! $last_changed ) {
     922                $last_changed = 1;
     923                wp_cache_set( 'last_changed', $last_changed, 'posts' );
     924        }
     925
    921926        if ( 'monthly' == $type ) {
    922927                $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 $order $limit";
    923                 $key = md5($query);
    924                 $cache = wp_cache_get( 'wp_get_archives' , 'general');
    925                 if ( !isset( $cache[ $key ] ) ) {
    926                         $arcresults = $wpdb->get_results($query);
    927                         $cache[ $key ] = $arcresults;
    928                         wp_cache_set( 'wp_get_archives', $cache, 'general' );
    929                 } else {
    930                         $arcresults = $cache[ $key ];
     928                $key = md5( $query );
     929                $key = "wp_get_archives:$key:$last_changed";
     930                if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
     931                        $results = $wpdb->get_results( $query );
     932                        wp_cache_set( $key, $results, 'posts' );
    931933                }
    932                 if ( $arcresults ) {
     934                if ( $results ) {
    933935                        $afterafter = $after;
    934                         foreach ( (array) $arcresults as $arcresult ) {
    935                                 $url = get_month_link( $arcresult->year, $arcresult->month );
     936                        foreach ( (array) $results as $result ) {
     937                                $url = get_month_link( $result->year, $result->month );
    936938                                /* translators: 1: month name, 2: 4-digit year */
    937                                 $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($arcresult->month), $arcresult->year);
     939                                $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month($result->month), $result->year);
    938940                                if ( $show_post_count )
    939                                         $after = ' ('.$arcresult->posts.')' . $afterafter;
     941                                        $after = ' ('.$result->posts.')' . $afterafter;
    940942                                $output .= get_archives_link($url, $text, $format, $before, $after);
    941943                        }
    942944                }
    943945        } elseif ('yearly' == $type) {
    944946                $query = "SELECT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date $order $limit";
    945                 $key = md5($query);
    946                 $cache = wp_cache_get( 'wp_get_archives' , 'general');
    947                 if ( !isset( $cache[ $key ] ) ) {
    948                         $arcresults = $wpdb->get_results($query);
    949                         $cache[ $key ] = $arcresults;
    950                         wp_cache_set( 'wp_get_archives', $cache, 'general' );
    951                 } else {
    952                         $arcresults = $cache[ $key ];
     947                $key = md5( $query );
     948                $key = "wp_get_archives:$key:$last_changed";
     949                if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
     950                        $results = $wpdb->get_results( $query );
     951                        wp_cache_set( $key, $results, 'posts' );
    953952                }
    954                 if ($arcresults) {
     953                if ( $results ) {
    955954                        $afterafter = $after;
    956                         foreach ( (array) $arcresults as $arcresult) {
    957                                 $url = get_year_link($arcresult->year);
    958                                 $text = sprintf('%d', $arcresult->year);
     955                        foreach ( (array) $results as $result) {
     956                                $url = get_year_link($result->year);
     957                                $text = sprintf('%d', $result->year);
    959958                                if ($show_post_count)
    960                                         $after = ' ('.$arcresult->posts.')' . $afterafter;
     959                                        $after = ' ('.$result->posts.')' . $afterafter;
    961960                                $output .= get_archives_link($url, $text, $format, $before, $after);
    962961                        }
    963962                }
    964963        } elseif ( 'daily' == $type ) {
    965964                $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date $order $limit";
    966                 $key = md5($query);
    967                 $cache = wp_cache_get( 'wp_get_archives' , 'general');
    968                 if ( !isset( $cache[ $key ] ) ) {
    969                         $arcresults = $wpdb->get_results($query);
    970                         $cache[ $key ] = $arcresults;
    971                         wp_cache_set( 'wp_get_archives', $cache, 'general' );
    972                 } else {
    973                         $arcresults = $cache[ $key ];
     965                $key = md5( $query );
     966                $key = "wp_get_archives:$key:$last_changed";
     967                if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
     968                        $results = $wpdb->get_results( $query );
     969                        $cache[ $key ] = $results;
     970                        wp_cache_set( $key, $results, 'posts' );
    974971                }
    975                 if ( $arcresults ) {
     972                if ( $results ) {
    976973                        $afterafter = $after;
    977                         foreach ( (array) $arcresults as $arcresult ) {
    978                                 $url    = get_day_link($arcresult->year, $arcresult->month, $arcresult->dayofmonth);
    979                                 $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $arcresult->year, $arcresult->month, $arcresult->dayofmonth);
     974                        foreach ( (array) $results as $result ) {
     975                                $url    = get_day_link($result->year, $result->month, $result->dayofmonth);
     976                                $date = sprintf('%1$d-%2$02d-%3$02d 00:00:00', $result->year, $result->month, $result->dayofmonth);
    980977                                $text = mysql2date($archive_day_date_format, $date);
    981978                                if ($show_post_count)
    982                                         $after = ' ('.$arcresult->posts.')'.$afterafter;
     979                                        $after = ' ('.$result->posts.')'.$afterafter;
    983980                                $output .= get_archives_link($url, $text, $format, $before, $after);
    984981                        }
    985982                }
    986983        } elseif ( 'weekly' == $type ) {
    987984                $week = _wp_mysql_week( '`post_date`' );
    988985                $query = "SELECT DISTINCT $week AS `week`, YEAR( `post_date` ) AS `yr`, DATE_FORMAT( `post_date`, '%Y-%m-%d' ) AS `yyyymmdd`, count( `ID` ) AS `posts` FROM `$wpdb->posts` $join $where GROUP BY $week, YEAR( `post_date` ) ORDER BY `post_date` $order $limit";
    989                 $key = md5($query);
    990                 $cache = wp_cache_get( 'wp_get_archives' , 'general');
    991                 if ( !isset( $cache[ $key ] ) ) {
    992                         $arcresults = $wpdb->get_results($query);
    993                         $cache[ $key ] = $arcresults;
    994                         wp_cache_set( 'wp_get_archives', $cache, 'general' );
    995                 } else {
    996                         $arcresults = $cache[ $key ];
     986                $key = md5( $query );
     987                $key = "wp_get_archives:$key:$last_changed";
     988                if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
     989                        $results = $wpdb->get_results( $query );
     990                        wp_cache_set( $key, $results, 'posts' );
    997991                }
    998992                $arc_w_last = '';
    999993                $afterafter = $after;
    1000                 if ( $arcresults ) {
    1001                                 foreach ( (array) $arcresults as $arcresult ) {
    1002                                         if ( $arcresult->week != $arc_w_last ) {
    1003                                                 $arc_year = $arcresult->yr;
    1004                                                 $arc_w_last = $arcresult->week;
    1005                                                 $arc_week = get_weekstartend($arcresult->yyyymmdd, get_option('start_of_week'));
     994                if ( $results ) {
     995                                foreach ( (array) $results as $result ) {
     996                                        if ( $result->week != $arc_w_last ) {
     997                                                $arc_year = $result->yr;
     998                                                $arc_w_last = $result->week;
     999                                                $arc_week = get_weekstartend($result->yyyymmdd, get_option('start_of_week'));
    10061000                                                $arc_week_start = date_i18n($archive_week_start_date_format, $arc_week['start']);
    10071001                                                $arc_week_end = date_i18n($archive_week_end_date_format, $arc_week['end']);
    1008                                                 $url  = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', home_url(), '', '?', '=', $arc_year, '&', '=', $arcresult->week);
     1002                                                $url  = sprintf('%1$s/%2$s%3$sm%4$s%5$s%6$sw%7$s%8$d', home_url(), '', '?', '=', $arc_year, '&', '=', $result->week);
    10091003                                                $text = $arc_week_start . $archive_week_separator . $arc_week_end;
    10101004                                                if ($show_post_count)
    1011                                                         $after = ' ('.$arcresult->posts.')'.$afterafter;
     1005                                                        $after = ' ('.$result->posts.')'.$afterafter;
    10121006                                                $output .= get_archives_link($url, $text, $format, $before, $after);
    10131007                                        }
    10141008                                }
     
    10161010        } elseif ( ( 'postbypost' == $type ) || ('alpha' == $type) ) {
    10171011                $orderby = ('alpha' == $type) ? 'post_title ASC ' : 'post_date DESC ';
    10181012                $query = "SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit";
    1019                 $key = md5($query);
    1020                 $cache = wp_cache_get( 'wp_get_archives' , 'general');
    1021                 if ( !isset( $cache[ $key ] ) ) {
    1022                         $arcresults = $wpdb->get_results($query);
    1023                         $cache[ $key ] = $arcresults;
    1024                         wp_cache_set( 'wp_get_archives', $cache, 'general' );
    1025                 } else {
    1026                         $arcresults = $cache[ $key ];
     1013                $key = md5( $query );
     1014                $key = "wp_get_archives:$key:$last_changed";
     1015                if ( ! $results = wp_cache_get( $key, 'posts' ) ) {
     1016                        $results = $wpdb->get_results( $query );
     1017                        wp_cache_set( $key, $results, 'posts' );
    10271018                }
    1028                 if ( $arcresults ) {
    1029                         foreach ( (array) $arcresults as $arcresult ) {
    1030                                 if ( $arcresult->post_date != '0000-00-00 00:00:00' ) {
    1031                                         $url  = get_permalink( $arcresult );
    1032                                         if ( $arcresult->post_title )
    1033                                                 $text = strip_tags( apply_filters( 'the_title', $arcresult->post_title, $arcresult->ID ) );
     1019                if ( $results ) {
     1020                        foreach ( (array) $results as $result ) {
     1021                                if ( $result->post_date != '0000-00-00 00:00:00' ) {
     1022                                        $url  = get_permalink( $result );
     1023                                        if ( $result->post_title )
     1024                                                $text = strip_tags( apply_filters( 'the_title', $result->post_title, $result->ID ) );
    10341025                                        else
    1035                                                 $text = $arcresult->ID;
     1026                                                $text = $result->ID;
    10361027                                        $output .= get_archives_link($url, $text, $format, $before, $after);
    10371028                                }
    10381029                        }