WordPress.org

Make WordPress Core

Ticket #20487: comment_search_20487_v2.diff

File comment_search_20487_v2.diff, 3.0 KB (added by brokentone, 2 years ago)
  • wp-includes/comment.php

     
    222222                        'type' => '', 
    223223                        'user_id' => '', 
    224224                        'search' => '', 
     225                        'search_type' => '', 
     226                        'search_field' => '', 
    225227                        'count' => false 
    226228                ); 
    227229 
     
    322324                if ( '' !== $user_id ) 
    323325                        $where .= $wpdb->prepare( ' AND user_id = %d', $user_id ); 
    324326                if ( '' !== $search ) 
    325                         $where .= $this->get_search_sql( $search, array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_content' ) ); 
     327                        $where .= $this->get_search_sql( $search, array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_content' ), $search_field, $search_type ); 
    326328 
    327329                $post_fields = array_filter( compact( array( 'post_author', 'post_name', 'post_parent', 'post_status', 'post_type', ) ) ); 
    328330                if ( ! empty( $post_fields ) ) { 
     
    359361         * @param array $cols 
    360362         * @return string 
    361363         */ 
    362         function get_search_sql( $string, $cols ) { 
     364        function get_search_sql( $string, $cols, $search_field='', $search_type='' ) { 
    363365                $string = esc_sql( like_escape( $string ) ); 
     366                $wildcard = '%'; 
     367                if($search_type == 'exact') $wildcard = ''; 
    364368 
    365369                $searches = array(); 
    366                 foreach ( $cols as $col ) 
    367                         $searches[] = "$col LIKE '%$string%'"; 
     370                if($this->query_vars['search_field'] && in_array($search_field, $cols)) { 
     371                        $searches[] = $this->query_vars['search_field'] . " LIKE '$wildcard$string$wildcard'"; 
     372                } else { 
     373                        foreach ( $cols as $col ) 
     374                                $searches[] = "$col LIKE '%$string%'"; 
     375                } 
    368376 
     377                if (count($searches) == 1) return ' AND ' . $searches[0];  
    369378                return ' AND (' . implode(' OR ', $searches) . ')'; 
    370379        } 
    371380} 
  • wp-admin/includes/class-wp-comments-list-table.php

     
    5050                $comment_type = !empty( $_REQUEST['comment_type'] ) ? $_REQUEST['comment_type'] : ''; 
    5151 
    5252                $search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : ''; 
     53                $search_type = ( isset( $_REQUEST['s_type'] ) ) ? $_REQUEST['s_type'] : ''; 
     54                $search_field = ( isset( $_REQUEST['s_field'] ) ) ? $_REQUEST['s_field'] : ''; 
    5355 
    5456                $user_id = ( isset( $_REQUEST['user_id'] ) ) ? $_REQUEST['user_id'] : ''; 
    5557 
     
    8789                $args = array( 
    8890                        'status' => isset( $status_map[$comment_status] ) ? $status_map[$comment_status] : $comment_status, 
    8991                        'search' => $search, 
     92                        'search_type' => $search_type, 
     93                        'search_field' => $search_field, 
    9094                        'user_id' => $user_id, 
    9195                        'offset' => $start, 
    9296                        'number' => $number, 
     
    462466                        } 
    463467                        echo '<a href="edit-comments.php?s='; 
    464468                        comment_author_IP(); 
    465                         echo '&amp;mode=detail'; 
     469                        echo '&amp;mode=detail&amp;s_type=exact&amp;s_field=comment_author_IP'; 
    466470                        if ( 'spam' == $comment_status ) 
    467471                                echo '&amp;comment_status=spam'; 
    468472                        echo '">';