Changeset 4934

Show
Ignore:
Timestamp:
02/24/07 07:33:29 (2 years ago)
Author:
ryan
Message:

Comment feeds everywhere. Props mdawaffe and rob1n. fixes #2485

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wp-includes/comment-template.php

    r4886 r4934  
    291291    } 
    292292 
    293     $comments = apply_filters( 'comments_array', $comments, $post->ID ); 
     293    // keep $comments for legacy's sake (remember $table*? ;) ) 
     294    $comments = $wp_query->comments = apply_filters( 'comments_array', $comments, $post->ID ); 
     295    $wp_query->comment_count = count($wp_query->comments); 
    294296 
    295297    define('COMMENTS_TEMPLATE', true); 
  • trunk/wp-includes/feed-atom-comments.php

    r4928 r4934  
    99> 
    1010    <title type="text"><?php  
    11         if (is_single() || is_page()) { 
     11        if ( is_singular() ) 
    1212            printf(__('Comments on: %s'), get_the_title_rss()); 
    13         } else { 
    14             printf(__('Comments for %s'), get_bloginfo_rss('name')); 
    15         } 
     13        elseif ( is_search() ) 
     14            printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); 
     15        else 
     16            printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); 
    1617    ?></title> 
    1718    <subtitle type="text"><?php bloginfo_rss('description'); ?></subtitle> 
     
    2526 
    2627<?php 
    27 $i = 0; 
    28 if (have_posts()) : 
    29     while (have_posts()) : the_post(); 
    30         if ($i < 1) { 
    31             $i++; 
    32         } 
    33          
    34         if (is_single() || is_page()) { 
    35             $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email,  
    36             comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID,  
    37             $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments  
    38             LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE comment_post_ID = '" . get_the_ID() . "'  
    39             AND $wpdb->comments.comment_approved = '1' AND $wpdb->posts.post_status = 'publish'  
    40             AND post_date_gmt < '" . gmdate("Y-m-d H:i:59") . "'  
    41             ORDER BY comment_date_gmt ASC" ); 
    42         } else { // if no post id passed in, we'll just use the last posts_per_rss comments. 
    43             $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email,  
    44             comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID,  
    45             $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments  
    46             LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE $wpdb->posts.post_status = 'publish'  
    47             AND $wpdb->comments.comment_approved = '1' AND post_date_gmt < '" . gmdate("Y-m-d H:i:s") . "'   
    48             ORDER BY comment_date_gmt DESC LIMIT " . get_option('posts_per_rss') ); 
    49         } 
    50          
    51         if ($comments) { 
    52             foreach ($comments as $comment) { 
    53                 $GLOBALS['comment'] =& $comment; 
    54                 get_post_custom($comment->comment_post_ID); 
     28if ( have_comments() ) : while ( have_comments() ) : the_comment(); 
     29    $comment_post = get_post($comment->comment_post_ID); 
     30    get_post_custom($comment_post->ID); 
    5531?> 
    5632    <entry> 
    5733        <title><?php 
    58             if (!(is_single() || is_page())) { 
    59                 $title = get_the_title($comment->comment_post_ID); 
     34            if ( !is_singular() ) { 
     35                $title = get_the_title($comment_post->ID); 
    6036                $title = apply_filters('the_title', $title); 
    6137                $title = apply_filters('the_title_rss', $title); 
     
    7046            <name><?php comment_author_rss(); ?></name> 
    7147            <?php if (get_comment_author_url()) echo '<uri>' . get_comment_author_url() . '</uri>'; ?> 
     48 
    7249        </author> 
    7350         
     
    7552        <updated><?php echo mysql2date('D, d M Y H:i:s +0000', get_comment_time('Y-m-d H:i:s', true), false); ?></updated> 
    7653        <published><?php echo mysql2date('D, d M Y H:i:s +0000', get_comment_time('Y-m-d H:i:s', true), false); ?></published> 
    77          
    78     <?php if (!empty($comment->post_password) && $_COOKIE['wp-postpass'] != $comment->post_password) { ?> 
     54<?php if (!empty($comment_post->post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> 
    7955        <content type="html" xml:base="<?php comment_link(); ?>"><![CDATA[<?php echo get_the_password_form(); ?>]]></content> 
    80    <?php } else { ?> 
     56<?php else : // post pass ?> 
    8157        <content type="html" xml:base="<?php comment_link(); ?>"><![CDATA[<?php comment_text(); ?>]]></content> 
    82     <?php } ?> 
     58<?php endif; // post pass 
     59    do_action('comment_atom_entry', $comment->comment_ID, $comment_post->ID); 
     60?> 
    8361    </entry> 
    84 <?php 
    85             } 
    86         } 
    87          
    88     endwhile; 
    89 endif; 
    90 ?> 
     62<?php endwhile; endif; ?> 
    9163</feed> 
  • trunk/wp-includes/feed-rss2-comments.php

    r4927 r4934  
    88    xmlns:content="http://purl.org/rss/1.0/modules/content/"> 
    99<channel> 
    10 <?php 
    11 $i = 0; 
    12 if (have_posts()) : 
    13   while (have_posts()) : the_post(); 
    14     if ($i < 1) { 
    15         $i++; 
    16 ?> 
    17     <title><?php if (is_single() || is_page() ) { printf(__('Comments on: %s'), get_the_title_rss()); } else { printf(__('Comments for %s'), get_bloginfo_rss("name")); } ?></title> 
     10   <title><?php 
     11        if ( is_singular() ) 
     12            printf(__('Comments on: %s'), get_the_title_rss()); 
     13        elseif ( is_search() ) 
     14           printf(__('Comments for %s searching on %s'), get_bloginfo_rss( 'name' ), attribute_escape($wp_query->query_vars['s'])); 
     15        else 
     16            printf(__('Comments for %s'), get_bloginfo_rss( 'name' ) . get_wp_title_rss()); 
     17    ?></title> 
    1818    <link><?php (is_single()) ? permalink_single_rss() : bloginfo_rss("url") ?></link> 
    1919    <description><?php bloginfo_rss("description") ?></description> 
     
    2222 
    2323<?php  
    24         if (is_single() || is_page()) { 
    25             $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email,  
    26             comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID,  
    27             $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments  
    28             LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE comment_post_ID = '" . get_the_ID() . "'  
    29             AND $wpdb->comments.comment_approved = '1' AND $wpdb->posts.post_status = 'publish'  
    30             AND post_date_gmt < '" . gmdate("Y-m-d H:i:59") . "'  
    31             ORDER BY comment_date_gmt ASC" ); 
    32         } else { // if no post id passed in, we'll just ue the last 10 comments. 
    33             $comments = $wpdb->get_results("SELECT comment_ID, comment_author, comment_author_email,  
    34             comment_author_url, comment_date, comment_date_gmt, comment_content, comment_post_ID,  
    35             $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments  
    36             LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE $wpdb->posts.post_status = 'publish'  
    37             AND $wpdb->comments.comment_approved = '1' AND post_date_gmt < '" . gmdate("Y-m-d H:i:s") . "'   
    38             ORDER BY comment_date_gmt DESC LIMIT " . get_option('posts_per_rss') ); 
    39         } 
    40     // this line is WordPress' motor, do not delete it. 
    41         if ($comments) { 
    42             foreach ($comments as $comment) { 
    43                 $GLOBALS['comment'] =& $comment; 
    44                 // Some plugins may need to know the metadata 
    45                 // associated with this comment's post: 
    46                 get_post_custom($comment->comment_post_ID); 
     24if ( have_comments() ) : while ( have_comments() ) : the_comment(); 
     25    $comment_post = get_post($comment->comment_post_ID); 
     26    get_post_custom($comment_post->ID); 
    4727?> 
    4828    <item> 
    49         <title><?php if ( ! (is_single() || is_page()) ) { 
    50             $title = get_the_title($comment->comment_post_ID); 
    51             $title = apply_filters('the_title', $title); 
    52             $title = apply_filters('the_title_rss', $title); 
    53             printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); 
    54         } else { 
    55             printf(__('By: %s'), get_comment_author_rss()); 
    56         } ?></title> 
     29        <title><?php 
     30            if ( !is_singular() ) { 
     31                $title = get_the_title($comment_post->ID); 
     32                $title = apply_filters('the_title', $title); 
     33                $title = apply_filters('the_title_rss', $title); 
     34                printf(__('Comment on %1$s by %2$s'), $title, get_comment_author_rss()); 
     35            } else { 
     36                printf(__('By: %s'), get_comment_author_rss()); 
     37            } 
     38        ?></title> 
    5739        <link><?php comment_link() ?></link> 
    5840        <author><?php echo get_comment_author_rss() ?></author> 
    5941        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_comment_time('Y-m-d H:i:s', true), false); ?></pubDate> 
    6042        <guid><?php comment_link() ?></guid> 
    61             <?php 
    62             if (!empty($comment->post_password) && $_COOKIE['wp-postpass'] != $comment->post_password) { 
    63             ?> 
     43<?php if (!empty($comment_post->post_password) && $_COOKIE['wp-postpass'] != $comment_post->post_password) : ?> 
    6444        <description><?php _e('Protected Comments: Please enter your password to view comments.'); ?></description> 
    6545        <content:encoded><![CDATA[<?php echo get_the_password_form() ?>]]></content:encoded> 
    66             <?php 
    67             } else { 
    68             ?> 
     46<?php else : // post pass ?> 
    6947        <description><?php comment_text_rss() ?></description> 
    7048        <content:encoded><![CDATA[<?php comment_text() ?>]]></content:encoded> 
    71             <?php 
    72             } // close check for password 
    73             do_action('commentrss2_item', $comment->comment_ID, $comment->comment_post_ID); 
    74             ?> 
     49<?php endif; // post pass 
     50    do_action('commentrss2_item', $comment->comment_ID, $comment_post->ID); 
     51?> 
    7552    </item> 
    76 <?php 
    77             } 
    78         } 
    79     } 
    80 endwhile; endif; 
    81 ?> 
     53<?php endwhile; endif; ?> 
    8254</channel> 
    8355</rss> 
  • trunk/wp-includes/feed.php

    r4933 r4934  
    1111} 
    1212 
     13function get_wp_title_rss($sep = '&#187;') { 
     14    $title = wp_title($sep, false); 
     15    $title = apply_filters('get_wp_title_rss', $title); 
     16    return $title; 
     17} 
    1318 
    1419function get_the_title_rss() { 
  • trunk/wp-includes/functions.php

    r4928 r4934  
    940940 
    941941function do_feed() { 
     942    global $wp_query; 
     943 
    942944    $feed = get_query_var('feed'); 
    943945 
     
    946948 
    947949    if ( $feed == '' || $feed == 'feed' ) 
    948         $feed = 'rss2'; 
    949      
    950     $for_comments = false; 
    951  
    952     if ( is_singular() || get_query_var('withcomments') == 1 ) 
    953         $for_comments = true; 
    954  
    955      if ( false !== strpos($feed, 'comments-') ) { 
    956         $for_comments = true; 
    957         $feed = str_replace('comments-', '', $feed); 
    958      } 
    959  
    960      if ( get_query_var('withoutcomments') == 1 ) 
    961         $for_comments = false; 
     950        $feed = 'rss2'; 
    962951 
    963952    $hook = 'do_feed_' . $feed; 
    964     do_action($hook, $for_comments); 
     953    do_action($hook, $wp_query->is_comment_feed); 
    965954} 
    966955 
  • trunk/wp-includes/query.php

    r4911 r4934  
    99 
    1010    return $wp_query->get($var); 
     11} 
     12 
     13function set_query_var($var, $value) { 
     14    global $wp_query; 
     15 
     16    return $wp_query->set($var, $value); 
    1117} 
    1218 
     
    249255    $wp_query->the_post(); 
    250256} 
     257 
     258/* 
     259 * Comments loop.  
     260 */  
     261 
     262function have_comments() {  
     263    global $wp_query;  
     264    return $wp_query->have_comments();  
     265}  
     266 
     267function the_comment() {  
     268    global $wp_query;  
     269    return $wp_query->the_comment();  
     270 
    251271 
    252272/* 
     
    266286    var $in_the_loop = false; 
    267287    var $post; 
     288     
     289    var $comments; 
     290    var $comment_count = 0; 
     291    var $current_comment = -1; 
     292    var $comment; 
    268293 
    269294    var $found_posts = 0; 
     
    283308    var $is_search = false; 
    284309    var $is_feed = false; 
     310    var $is_comment_feed = false; 
    285311    var $is_trackback = false; 
    286312    var $is_home = false; 
     
    306332        $this->is_search = false; 
    307333        $this->is_feed = false; 
     334        $this->is_comment_feed = false; 
    308335        $this->is_trackback = false; 
    309336        $this->is_home = false; 
     
    538565            $this->is_singular = true; 
    539566 
     567        if ( false !== strpos($qv['feed'], 'comments-') ) { 
     568            $this->query_vars['feed'] = $qv['feed'] = str_replace('comments-', '', $qv['feed']); 
     569            $qv['withcomments'] = 1; 
     570        } 
     571 
     572        if ( $this->is_feed && (!empty($qv['withcomments']) || ( empty($qv['withoutcomments']) && $this->is_singular ) ) ) 
     573            $this->is_comment_feed = true; 
     574 
    540575        if ( ! ($this->is_singular || $this->is_archive || $this->is_search || $this->is_feed || $this->is_trackback || $this->is_404 || $this->is_admin || $this->is_comments_popup)) { 
    541576            $this->is_home = true; 
     
    9671002            } 
    9681003        } 
     1004         
     1005        // Comments feeds 
     1006        if ( $this->is_comment_feed && ( $this->is_archive || $this->is_search || !$this->is_singular ) ) { 
     1007            if ( $this->is_archive || $this->is_search ) { 
     1008                $cjoin = "LEFT JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) $join "; 
     1009                $cwhere = "WHERE comment_approved = '1' $where"; 
     1010                $cgroupby = "GROUP BY $wpdb->comments.comment_id"; 
     1011            } else { // Other non singular e.g. front 
     1012                $cjoin = "LEFT JOIN $wpdb->posts ON ( $wpdb->comments.comment_post_ID = $wpdb->posts.ID )"; 
     1013                $cwhere = "WHERE post_status = 'publish' AND comment_approved = '1'"; 
     1014                $cgroupby = ''; 
     1015            } 
     1016             
     1017            $cjoin = apply_filters('comment_feed_join', $cjoin); 
     1018            $cwhere = apply_filters('comment_feed_where', $cwhere); 
     1019            $cgroupby = apply_filters('comment_feed_groupby', $cgroupby); 
     1020             
     1021            $this->comments = (array) $wpdb->get_results("SELECT $distinct $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby ORDER BY comment_date_gmt DESC LIMIT " . get_settings('posts_per_rss')); 
     1022            $this->comment_count = count($this->comments); 
     1023 
     1024            $post_ids = array(); 
     1025             
     1026            foreach ($this->comments as $comment) 
     1027                $post_ids[] = (int) $comment->comment_post_ID; 
     1028             
     1029            $post_ids = join(',', $post_ids); 
     1030            $join = ''; 
     1031            if ( $post_ids ) 
     1032                $where = "AND $wpdb->posts.ID IN ($post_ids) "; 
     1033            else 
     1034                $where = "AND 0"; 
     1035        } 
    9691036 
    9701037        // Apply post-paging filters on where and join.  Only plugins that 
     
    9871054 
    9881055        $this->posts = $wpdb->get_results($this->request); 
     1056 
     1057        if ( $this->is_comment_feed && $this->is_singular ) { 
     1058            $cjoin = apply_filters('comment_feed_join', ''); 
     1059            $cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = {$this->posts[0]->ID} AND comment_approved = '1'"); 
     1060            $comments_request = "SELECT $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere ORDER BY comment_date_gmt DESC LIMIT " . get_settings('posts_per_rss'); 
     1061            $this->comments = $wpdb->get_results($comments_request); 
     1062            $this->comment_count = count($this->comments); 
     1063        } 
     1064         
    9891065        if ( !empty($limits) ) { 
    9901066            $found_posts_query = apply_filters( 'found_posts_query', 'SELECT FOUND_ROWS()' ); 
     
    9931069            $this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']); 
    9941070        } 
     1071         
    9951072        // Check post status to determine if post should be displayed. 
    9961073        if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) { 
     
    10721149        } 
    10731150    } 
     1151     
     1152    function next_comment() { 
     1153        $this->current_comment++; 
     1154         
     1155        $this->comment = $this->comments[$this->current_comment]; 
     1156        return $this->comment; 
     1157    } 
     1158     
     1159    function the_comment() { 
     1160        global $comment; 
     1161         
     1162        $comment = $this->next_comment(); 
     1163         
     1164        if ($this->current_comment == 0) { 
     1165            do_action('comment_loop_start'); 
     1166        } 
     1167    } 
     1168     
     1169    function have_comments() { 
     1170        if ($this->current_comment + 1 < $this->comment_count) { 
     1171            return true; 
     1172        } elseif ($this->current_comment + 1 == $this->comment_count) { 
     1173            $this->rewind_comments(); 
     1174        } 
     1175         
     1176        return false; 
     1177    } 
     1178     
     1179    function rewind_comments() { 
     1180        $this->current_comment = -1; 
     1181        if ($this->comment_count > 0) { 
     1182            $this->comment = $this->comments[0]; 
     1183        } 
     1184    } 
    10741185 
    10751186    function &query($query) {