WordPress.org

Make WordPress Core

Ticket #23206: 23206.diff

File 23206.diff, 8.7 KB (added by ryan, 15 months 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                        }