<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[32765] trunk/src/wp-includes: Improve lastBuildDate timestamp in rss feeds</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/32765">32765</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/32765","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>jorbin</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2015-06-14 18:36:14 +0000 (Sun, 14 Jun 2015)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Improve lastBuildDate timestamp in rss feeds

RSS feed timestamps should reflect the actual timestamps for those RSS feeds rather than the generic timestamp for all posts and all comments. 

Props stevenkword.
Fixes <a href="https://core.trac.wordpress.org/ticket/4575">#4575</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesfeedrss2commentsphp">trunk/src/wp-includes/feed-rss2-comments.php</a></li>
<li><a href="#trunksrcwpincludesfeedrss2php">trunk/src/wp-includes/feed-rss2.php</a></li>
<li><a href="#trunksrcwpincludesfeedphp">trunk/src/wp-includes/feed.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesfeedrss2commentsphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/feed-rss2-comments.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/feed-rss2-comments.php      2015-06-14 17:36:21 UTC (rev 32764)
+++ trunk/src/wp-includes/feed-rss2-comments.php        2015-06-14 18:36:14 UTC (rev 32765)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -43,7 +43,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
</span><span class="cx" style="display: block; padding: 0 10px">        <link><?php (is_single()) ? the_permalink_rss() : bloginfo_rss("url") ?></link>
</span><span class="cx" style="display: block; padding: 0 10px">        <description><?php bloginfo_rss("description") ?></description>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <lastBuildDate><?php echo mysql2date('r', get_lastcommentmodified('GMT')); ?></lastBuildDate>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <lastBuildDate><?php echo mysql2date('r', get_last_build_date_feed(), false ); ?></lastBuildDate>
</ins><span class="cx" style="display: block; padding: 0 10px">         <sy:updatePeriod><?php
</span><span class="cx" style="display: block; padding: 0 10px">                /** This filter is documented in wp-includes/feed-rss2.php */
</span><span class="cx" style="display: block; padding: 0 10px">                echo apply_filters( 'rss_update_period', 'hourly' );
</span></span></pre></div>
<a id="trunksrcwpincludesfeedrss2php"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/feed-rss2.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/feed-rss2.php       2015-06-14 17:36:21 UTC (rev 32764)
+++ trunk/src/wp-includes/feed-rss2.php 2015-06-14 18:36:14 UTC (rev 32765)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -42,7 +42,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
</span><span class="cx" style="display: block; padding: 0 10px">        <link><?php bloginfo_rss('url') ?></link>
</span><span class="cx" style="display: block; padding: 0 10px">        <description><?php bloginfo_rss("description") ?></description>
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_last_build_date_feed(), false); ?></lastBuildDate>
</ins><span class="cx" style="display: block; padding: 0 10px">         <language><?php bloginfo_rss( 'language' ); ?></language>
</span><span class="cx" style="display: block; padding: 0 10px">        <sy:updatePeriod><?php
</span><span class="cx" style="display: block; padding: 0 10px">                $duration = 'hourly';
</span></span></pre></div>
<a id="trunksrcwpincludesfeedphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/feed.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/feed.php    2015-06-14 17:36:21 UTC (rev 32764)
+++ trunk/src/wp-includes/feed.php      2015-06-14 18:36:14 UTC (rev 32765)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -88,6 +88,40 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Get the timestamp of the most recently modified post from WP_Query
+ *
+ * If viewing a comment feed, the date of the most recently modified
+ * comment will be returned.
+ *
+ * @since 4.3.0
+ *
+ * @return string Date ('Y-m-d H:i:s' for use with mysql2date() )
+ */
+function get_last_build_date_feed() {
+       global $wp_query, $wpdb;
+
+       if ( $wp_query->have_posts() ) {
+               $post_ids = array();
+               foreach( $wp_query->posts as $post ) {
+                       $post_ids[] = $post->ID;
+                       $post_times[] = $post->post_modified_gmt;
+               }
+               $postids = implode( "','", $post_ids );
+               $max_post_time = max( $post_times );
+
+               if( $wp_query->is_comment_feed() ) {
+                       $max_comment_time = $wpdb->get_var( $wpdb->prepare( "SELECT MAX(comment_date_gmt) FROM $wpdb->comments WHERE comment_post_ID IN ('%s') AND comment_approved = '1'", $postids ) );
+
+                       return max( $max_post_time, $max_comment_time );
+               }
+               return $max_post_time;
+       }
+
+       // Fallback to last time any post was modified or published.
+       return get_lastpostmodified( 'GMT' );
+}
+
+/**
</ins><span class="cx" style="display: block; padding: 0 10px">  * Retrieve the blog title for the feed title.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><span class="cx" style="display: block; padding: 0 10px">  * @since 2.2.0
</span></span></pre>
</div>
</div>

</body>
</html>