[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/ -> class-wp-comment.php (source)

   1  <?php
   2  /**
   3   * Comment API: WP_Comment class
   4   *
   5   * @package WordPress
   6   * @subpackage Comments
   7   * @since 4.4.0
   8   */
   9  
  10  /**
  11   * Core class used to organize comments as instantiated objects with defined members.
  12   *
  13   * @since 4.4.0
  14   */
  15  final class WP_Comment {
  16  
  17      /**
  18       * Comment ID.
  19       *
  20       * A numeric string, for compatibility reasons.
  21       *
  22       * @since 4.4.0
  23       * @var string
  24       */
  25      public $comment_ID;
  26  
  27      /**
  28       * ID of the post the comment is associated with.
  29       *
  30       * A numeric string, for compatibility reasons.
  31       *
  32       * @since 4.4.0
  33       * @var string
  34       */
  35      public $comment_post_ID = 0;
  36  
  37      /**
  38       * Comment author name.
  39       *
  40       * @since 4.4.0
  41       * @var string
  42       */
  43      public $comment_author = '';
  44  
  45      /**
  46       * Comment author email address.
  47       *
  48       * @since 4.4.0
  49       * @var string
  50       */
  51      public $comment_author_email = '';
  52  
  53      /**
  54       * Comment author URL.
  55       *
  56       * @since 4.4.0
  57       * @var string
  58       */
  59      public $comment_author_url = '';
  60  
  61      /**
  62       * Comment author IP address (IPv4 format).
  63       *
  64       * @since 4.4.0
  65       * @var string
  66       */
  67      public $comment_author_IP = '';
  68  
  69      /**
  70       * Comment date in YYYY-MM-DD HH:MM:SS format.
  71       *
  72       * @since 4.4.0
  73       * @var string
  74       */
  75      public $comment_date = '0000-00-00 00:00:00';
  76  
  77      /**
  78       * Comment GMT date in YYYY-MM-DD HH::MM:SS format.
  79       *
  80       * @since 4.4.0
  81       * @var string
  82       */
  83      public $comment_date_gmt = '0000-00-00 00:00:00';
  84  
  85      /**
  86       * Comment content.
  87       *
  88       * @since 4.4.0
  89       * @var string
  90       */
  91      public $comment_content;
  92  
  93      /**
  94       * Comment karma count.
  95       *
  96       * A numeric string, for compatibility reasons.
  97       *
  98       * @since 4.4.0
  99       * @var string
 100       */
 101      public $comment_karma = 0;
 102  
 103      /**
 104       * Comment approval status.
 105       *
 106       * @since 4.4.0
 107       * @var string
 108       */
 109      public $comment_approved = '1';
 110  
 111      /**
 112       * Comment author HTTP user agent.
 113       *
 114       * @since 4.4.0
 115       * @var string
 116       */
 117      public $comment_agent = '';
 118  
 119      /**
 120       * Comment type.
 121       *
 122       * @since 4.4.0
 123       * @since 5.5.0 Default value changed to `comment`.
 124       * @var string
 125       */
 126      public $comment_type = 'comment';
 127  
 128      /**
 129       * Parent comment ID.
 130       *
 131       * A numeric string, for compatibility reasons.
 132       *
 133       * @since 4.4.0
 134       * @var string
 135       */
 136      public $comment_parent = 0;
 137  
 138      /**
 139       * Comment author ID.
 140       *
 141       * A numeric string, for compatibility reasons.
 142       *
 143       * @since 4.4.0
 144       * @var string
 145       */
 146      public $user_id = 0;
 147  
 148      /**
 149       * Comment children.
 150       *
 151       * @since 4.4.0
 152       * @var array
 153       */
 154      protected $children;
 155  
 156      /**
 157       * Whether children have been populated for this comment object.
 158       *
 159       * @since 4.4.0
 160       * @var bool
 161       */
 162      protected $populated_children = false;
 163  
 164      /**
 165       * Post fields.
 166       *
 167       * @since 4.4.0
 168       * @var array
 169       */
 170      protected $post_fields = array( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_content_filtered', 'post_parent', 'guid', 'menu_order', 'post_type', 'post_mime_type', 'comment_count' );
 171  
 172      /**
 173       * Retrieves a WP_Comment instance.
 174       *
 175       * @since 4.4.0
 176       *
 177       * @global wpdb $wpdb WordPress database abstraction object.
 178       *
 179       * @param int $id Comment ID.
 180       * @return WP_Comment|false Comment object, otherwise false.
 181       */
 182  	public static function get_instance( $id ) {
 183          global $wpdb;
 184  
 185          $comment_id = (int) $id;
 186          if ( ! $comment_id ) {
 187              return false;
 188          }
 189  
 190          $_comment = wp_cache_get( $comment_id, 'comment' );
 191  
 192          if ( ! $_comment ) {
 193              $_comment = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_ID = %d LIMIT 1", $comment_id ) );
 194  
 195              if ( ! $_comment ) {
 196                  return false;
 197              }
 198  
 199              wp_cache_add( $_comment->comment_ID, $_comment, 'comment' );
 200          }
 201  
 202          return new WP_Comment( $_comment );
 203      }
 204  
 205      /**
 206       * Constructor.
 207       *
 208       * Populates properties with object vars.
 209       *
 210       * @since 4.4.0
 211       *
 212       * @param WP_Comment $comment Comment object.
 213       */
 214  	public function __construct( $comment ) {
 215          foreach ( get_object_vars( $comment ) as $key => $value ) {
 216              $this->$key = $value;
 217          }
 218      }
 219  
 220      /**
 221       * Convert object to array.
 222       *
 223       * @since 4.4.0
 224       *
 225       * @return array Object as array.
 226       */
 227  	public function to_array() {
 228          return get_object_vars( $this );
 229      }
 230  
 231      /**
 232       * Get the children of a comment.
 233       *
 234       * @since 4.4.0
 235       *
 236       * @param array $args {
 237       *     Array of arguments used to pass to get_comments() and determine format.
 238       *
 239       *     @type string $format        Return value format. 'tree' for a hierarchical tree, 'flat' for a flattened array.
 240       *                                 Default 'tree'.
 241       *     @type string $status        Comment status to limit results by. Accepts 'hold' (`comment_status=0`),
 242       *                                 'approve' (`comment_status=1`), 'all', or a custom comment status.
 243       *                                 Default 'all'.
 244       *     @type string $hierarchical  Whether to include comment descendants in the results.
 245       *                                 'threaded' returns a tree, with each comment's children
 246       *                                 stored in a `children` property on the `WP_Comment` object.
 247       *                                 'flat' returns a flat array of found comments plus their children.
 248       *                                 Pass `false` to leave out descendants.
 249       *                                 The parameter is ignored (forced to `false`) when `$fields` is 'ids' or 'counts'.
 250       *                                 Accepts 'threaded', 'flat', or false. Default: 'threaded'.
 251       *     @type string|array $orderby Comment status or array of statuses. To use 'meta_value'
 252       *                                 or 'meta_value_num', `$meta_key` must also be defined.
 253       *                                 To sort by a specific `$meta_query` clause, use that
 254       *                                 clause's array key. Accepts 'comment_agent',
 255       *                                 'comment_approved', 'comment_author',
 256       *                                 'comment_author_email', 'comment_author_IP',
 257       *                                 'comment_author_url', 'comment_content', 'comment_date',
 258       *                                 'comment_date_gmt', 'comment_ID', 'comment_karma',
 259       *                                 'comment_parent', 'comment_post_ID', 'comment_type',
 260       *                                 'user_id', 'comment__in', 'meta_value', 'meta_value_num',
 261       *                                 the value of $meta_key, and the array keys of
 262       *                                 `$meta_query`. Also accepts false, an empty array, or
 263       *                                 'none' to disable `ORDER BY` clause.
 264       * }
 265       * @return WP_Comment[] Array of `WP_Comment` objects.
 266       */
 267  	public function get_children( $args = array() ) {
 268          $defaults = array(
 269              'format'       => 'tree',
 270              'status'       => 'all',
 271              'hierarchical' => 'threaded',
 272              'orderby'      => '',
 273          );
 274  
 275          $_args           = wp_parse_args( $args, $defaults );
 276          $_args['parent'] = $this->comment_ID;
 277  
 278          if ( is_null( $this->children ) ) {
 279              if ( $this->populated_children ) {
 280                  $this->children = array();
 281              } else {
 282                  $this->children = get_comments( $_args );
 283              }
 284          }
 285  
 286          if ( 'flat' === $_args['format'] ) {
 287              $children = array();
 288              foreach ( $this->children as $child ) {
 289                  $child_args           = $_args;
 290                  $child_args['format'] = 'flat';
 291                  // get_children() resets this value automatically.
 292                  unset( $child_args['parent'] );
 293  
 294                  $children = array_merge( $children, array( $child ), $child->get_children( $child_args ) );
 295              }
 296          } else {
 297              $children = $this->children;
 298          }
 299  
 300          return $children;
 301      }
 302  
 303      /**
 304       * Add a child to the comment.
 305       *
 306       * Used by `WP_Comment_Query` when bulk-filling descendants.
 307       *
 308       * @since 4.4.0
 309       *
 310       * @param WP_Comment $child Child comment.
 311       */
 312  	public function add_child( WP_Comment $child ) {
 313          $this->children[ $child->comment_ID ] = $child;
 314      }
 315  
 316      /**
 317       * Get a child comment by ID.
 318       *
 319       * @since 4.4.0
 320       *
 321       * @param int $child_id ID of the child.
 322       * @return WP_Comment|false Returns the comment object if found, otherwise false.
 323       */
 324  	public function get_child( $child_id ) {
 325          if ( isset( $this->children[ $child_id ] ) ) {
 326              return $this->children[ $child_id ];
 327          }
 328  
 329          return false;
 330      }
 331  
 332      /**
 333       * Set the 'populated_children' flag.
 334       *
 335       * This flag is important for ensuring that calling `get_children()` on a childless comment will not trigger
 336       * unneeded database queries.
 337       *
 338       * @since 4.4.0
 339       *
 340       * @param bool $set Whether the comment's children have already been populated.
 341       */
 342  	public function populated_children( $set ) {
 343          $this->populated_children = (bool) $set;
 344      }
 345  
 346      /**
 347       * Check whether a non-public property is set.
 348       *
 349       * If `$name` matches a post field, the comment post will be loaded and the post's value checked.
 350       *
 351       * @since 4.4.0
 352       *
 353       * @param string $name Property name.
 354       * @return bool
 355       */
 356  	public function __isset( $name ) {
 357          if ( in_array( $name, $this->post_fields, true ) && 0 !== (int) $this->comment_post_ID ) {
 358              $post = get_post( $this->comment_post_ID );
 359              return property_exists( $post, $name );
 360          }
 361      }
 362  
 363      /**
 364       * Magic getter.
 365       *
 366       * If `$name` matches a post field, the comment post will be loaded and the post's value returned.
 367       *
 368       * @since 4.4.0
 369       *
 370       * @param string $name
 371       * @return mixed
 372       */
 373  	public function __get( $name ) {
 374          if ( in_array( $name, $this->post_fields, true ) ) {
 375              $post = get_post( $this->comment_post_ID );
 376              return $post->$name;
 377          }
 378      }
 379  }


Generated: Thu Apr 25 01:00:03 2024 Cross-referenced by PHPXref 0.7.1