WP_Comment_Query::get_comments() – Get a list of comments matching the query vars.

You appear to be a bot. Output may be restricted

Description

Get a list of comments matching the query vars.

Usage

$int|int[]|WP_Comment[] = WP_Comment_Query::get_comments();

Parameters

Returns

int|int[]|WP_Comment[] List of comments or number of found comments if $count argument is true.

Source

File name: wordpress/wp-includes/class-wp-comment-query.php


Lines:

1 to 100 of 157
  public function get_comments() {
    global $wpdb;

    $this->WP_Comment_Query::parse_query();

    // Parse meta query.
    $this->meta_query = new WP_Meta_Query();
    $this->meta_query->parse_query_vars( $this->query_vars );

    
/**
 * Fires before comments are retrieved.
 *
 * @since 3.1.0
 *
 * @param WP_Comment_Query $query Current instance of WP_Comment_Query (passed by reference).
 */
    do_action_ref_array( 'pre_get_comments', array( &$this ) );

    // Reparse query vars, in case they were modified in a 'pre_get_comments' callback.
    $this->meta_query->parse_query_vars( $this->query_vars );
    if ( ! empty( $this->meta_query->queries ) ) {
      $this->meta_query_clauses = $this->meta_query->get_sql( 'comment', $wpdb->comments, 'comment_ID', $this );
    }

    $comment_data = null;

    
/**
 * Filters the comments data before the query takes place.
 *
 * Return a non-null value to bypass WordPress' default comment queries.
 *
 * The expected return type from this filter depends on the value passed
 * in the request query vars:
 * - When `$this->query_vars['count']` is set, the filter should return
 *   the comment count as an integer.
 * - When `'ids' === $this->query_vars['fields']`, the filter should return
 *   an array of comment IDs.
 * - Otherwise the filter should return an array of WP_Comment objects.
 *
 * Note that if the filter returns an array of comment data, it will be assigned
 * to the `comments` property of the current WP_Comment_Query instance.
 *
 * Filtering functions that require pagination information are encouraged to set
 * the `found_comments` and `max_num_pages` properties of the WP_Comment_Query object,
 * passed to the filter by reference. If WP_Comment_Query does not perform a database
 * query, it will not have enough information to generate these values itself.
 *
 * @since 5.3.0
 * @since 5.6.0 The returned array of comment data is assigned to the `comments` property
 *              of the current WP_Comment_Query instance.
 *
 * @param array|int|null   $comment_data Return an array of comment data to short-circuit WP's comment query,
 *                                       the comment count as an integer if `$this->query_vars['count']` is set,
 *                                       or null to allow WP to run its normal queries.
 * @param WP_Comment_Query $query        The WP_Comment_Query instance, passed by reference.
 */
    $comment_data = apply_filters_ref_array( 'comments_pre_query', array( $comment_data, &$this ) );

    if ( null !== $comment_data ) {
      if ( is_array( $comment_data ) && ! $this->query_vars['count'] ) {
        $this->comments = $comment_data;
      }

      return $comment_data;
    }

    /*
		 * Only use the args defined in the query_var_defaults to compute the key,
		 * but ignore 'fields', 'update_comment_meta_cache', 'update_comment_post_cache' which does not affect query results.
		 */
    $_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) );
    unset( $_args['fields'], $_args['update_comment_meta_cache'], $_args['update_comment_post_cache'] );

    $key          = md5( serialize( $_args ) );
    $last_changed = wp_cache_get_last_changed( 'comment' );

    $cache_key   = "get_comments:$key:$last_changed";
    $cache_value = wp_cache_get( $cache_key, 'comment' );
    if ( false === $cache_value ) {
      $comment_ids = $this->WP_Comment_Query::get_comment_ids();
      if ( $comment_ids ) {
        $this->WP_Comment_Query::set_found_comments();
      }

      $cache_value = array(
        'comment_ids'    => $comment_ids,
        'found_comments' => $this->found_comments,
      );
      wp_cache_add( $cache_key, $cache_value, 'comment' );
    } else {
      $comment_ids          = $cache_value['comment_ids'];
      $this->found_comments = $cache_value['found_comments'];
    }

    if ( $this->found_comments && $this->query_vars['number'] ) {
      $this->max_num_pages = ceil( $this->found_comments / $this->query_vars['number'] );
    }

 View on GitHub View on Trac