WordPress.org

Make WordPress Core

Ticket #10668: extend_get_comments.10668.diff

File extend_get_comments.10668.diff, 2.6 KB (added by filosofo, 9 years ago)
  • wp-includes/comment.php

     
    182182function get_comments( $args = '' ) {
    183183        global $wpdb;
    184184
    185         $defaults = array('status' => '', 'orderby' => 'comment_date_gmt', 'order' => 'DESC', 'number' => '', 'offset' => '', 'post_id' => 0);
     185        $defaults = array(
     186                'author_email' => '',
     187                'ID' => '',
     188                'karma' => '',
     189                'number' => '',
     190                'offset' => '',
     191                'orderby' => '',
     192                'order' => 'DESC',
     193                'parent' => '',
     194                'post_ID' => '',
     195                'post_id' => 0,
     196                'status' => '',
     197                'type' => '',
     198                'user_id' => '',
     199        );
    186200
    187201        $args = wp_parse_args( $args, $defaults );
    188202        extract( $args, EXTR_SKIP );
     
    215229
    216230        $order = ( 'ASC' == $order ) ? 'ASC' : 'DESC';
    217231
    218         $orderby = 'comment_date_gmt';  // Hard code for now
     232        if ( ! empty( $orderby ) ) {
     233                $ordersby = is_array($orderby) ? $orderby : preg_split('/[,\s]/', $orderby);
     234                $ordersby = array_intersect(
     235                        $ordersby,
     236                        array(
     237                                'comment_agent',
     238                                'comment_approved',
     239                                'comment_author',
     240                                'comment_author_email',
     241                                'comment_author_IP',
     242                                'comment_author_url',
     243                                'comment_content',
     244                                'comment_date',
     245                                'comment_date_gmt',
     246                                'comment_ID',
     247                                'comment_karma',
     248                                'comment_parent',
     249                                'comment_post_ID',
     250                                'comment_type',
     251                                'user_id',
     252                        )
     253                );
     254                $orderby = empty( $ordersby ) ? 'comment_date_gmt' : implode(', ', $ordersby);
     255        } else {
     256                $orderby = 'comment_date_gmt';
     257        }
    219258
    220259        $number = absint($number);
    221260        $offset = absint($offset);
     
    230269                $number = '';
    231270        }
    232271
     272        $post_where = '';
     273
    233274        if ( ! empty($post_id) )
    234                 $post_where = $wpdb->prepare( 'comment_post_ID = %d AND', $post_id );
    235         else
    236                 $post_where = '';
     275                $post_where .= $wpdb->prepare( 'comment_post_ID = %d AND ', $post_id );
     276        if ( '' !== $author_email )
     277                $post_where .= $wpdb->prepare( 'comment_author_email = %s AND ', $author_email );
     278        if ( '' !== $karma )
     279                $post_where .= $wpdb->prepare( 'comment_karma = %d AND ', $karma );
     280        if ( 'comment' == $type )
     281                $post_where .= "comment_type = '' AND ";
     282        elseif ( ! empty( $type ) )
     283                $post_where .= $wpdb->prepare( 'comment_type = %s AND ', $type );
     284        if ( '' !== $parent )
     285                $post_where .= $wpdb->prepare( 'comment_parent = %d AND ', $parent );
     286        if ( '' !== $user_id )
     287                $post_where .= $wpdb->prepare( 'user_id = %d AND ', $user_id );
    237288
    238289        $comments = $wpdb->get_results( "SELECT * FROM $wpdb->comments WHERE $post_where $approved ORDER BY $orderby $order $number" );
    239290        wp_cache_add( $cache_key, $comments, 'comment' );