diff options
Diffstat (limited to '')
-rw-r--r-- | wp-includes/class-wp-post.php | 388 |
1 files changed, 388 insertions, 0 deletions
diff --git a/wp-includes/class-wp-post.php b/wp-includes/class-wp-post.php new file mode 100644 index 0000000..682b000 --- /dev/null +++ b/wp-includes/class-wp-post.php @@ -0,0 +1,388 @@ +<?php +/** + * Post API: WP_Post class + * + * @package WordPress + * @subpackage Post + * @since 4.4.0 + */ + +/** + * Core class used to implement the WP_Post object. + * + * @since 3.5.0 + * + * @property string $page_template + * + * @property-read int[] $ancestors + * @property-read int[] $post_category + * @property-read string[] $tags_input + */ +#[AllowDynamicProperties] +final class WP_Post { + + /** + * Post ID. + * + * @since 3.5.0 + * @var int + */ + public $ID; + + /** + * ID of post author. + * + * A numeric string, for compatibility reasons. + * + * @since 3.5.0 + * @var string + */ + public $post_author = 0; + + /** + * The post's local publication time. + * + * @since 3.5.0 + * @var string + */ + public $post_date = '0000-00-00 00:00:00'; + + /** + * The post's GMT publication time. + * + * @since 3.5.0 + * @var string + */ + public $post_date_gmt = '0000-00-00 00:00:00'; + + /** + * The post's content. + * + * @since 3.5.0 + * @var string + */ + public $post_content = ''; + + /** + * The post's title. + * + * @since 3.5.0 + * @var string + */ + public $post_title = ''; + + /** + * The post's excerpt. + * + * @since 3.5.0 + * @var string + */ + public $post_excerpt = ''; + + /** + * The post's status. + * + * @since 3.5.0 + * @var string + */ + public $post_status = 'publish'; + + /** + * Whether comments are allowed. + * + * @since 3.5.0 + * @var string + */ + public $comment_status = 'open'; + + /** + * Whether pings are allowed. + * + * @since 3.5.0 + * @var string + */ + public $ping_status = 'open'; + + /** + * The post's password in plain text. + * + * @since 3.5.0 + * @var string + */ + public $post_password = ''; + + /** + * The post's slug. + * + * @since 3.5.0 + * @var string + */ + public $post_name = ''; + + /** + * URLs queued to be pinged. + * + * @since 3.5.0 + * @var string + */ + public $to_ping = ''; + + /** + * URLs that have been pinged. + * + * @since 3.5.0 + * @var string + */ + public $pinged = ''; + + /** + * The post's local modified time. + * + * @since 3.5.0 + * @var string + */ + public $post_modified = '0000-00-00 00:00:00'; + + /** + * The post's GMT modified time. + * + * @since 3.5.0 + * @var string + */ + public $post_modified_gmt = '0000-00-00 00:00:00'; + + /** + * A utility DB field for post content. + * + * @since 3.5.0 + * @var string + */ + public $post_content_filtered = ''; + + /** + * ID of a post's parent post. + * + * @since 3.5.0 + * @var int + */ + public $post_parent = 0; + + /** + * The unique identifier for a post, not necessarily a URL, used as the feed GUID. + * + * @since 3.5.0 + * @var string + */ + public $guid = ''; + + /** + * A field used for ordering posts. + * + * @since 3.5.0 + * @var int + */ + public $menu_order = 0; + + /** + * The post's type, like post or page. + * + * @since 3.5.0 + * @var string + */ + public $post_type = 'post'; + + /** + * An attachment's mime type. + * + * @since 3.5.0 + * @var string + */ + public $post_mime_type = ''; + + /** + * Cached comment count. + * + * A numeric string, for compatibility reasons. + * + * @since 3.5.0 + * @var string + */ + public $comment_count = 0; + + /** + * Stores the post object's sanitization level. + * + * Does not correspond to a DB field. + * + * @since 3.5.0 + * @var string + */ + public $filter; + + /** + * Retrieve WP_Post instance. + * + * @since 3.5.0 + * + * @global wpdb $wpdb WordPress database abstraction object. + * + * @param int $post_id Post ID. + * @return WP_Post|false Post object, false otherwise. + */ + public static function get_instance( $post_id ) { + global $wpdb; + + $post_id = (int) $post_id; + if ( ! $post_id ) { + return false; + } + + $_post = wp_cache_get( $post_id, 'posts' ); + + if ( ! $_post ) { + $_post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1", $post_id ) ); + + if ( ! $_post ) { + return false; + } + + $_post = sanitize_post( $_post, 'raw' ); + wp_cache_add( $_post->ID, $_post, 'posts' ); + } elseif ( empty( $_post->filter ) || 'raw' !== $_post->filter ) { + $_post = sanitize_post( $_post, 'raw' ); + } + + return new WP_Post( $_post ); + } + + /** + * Constructor. + * + * @since 3.5.0 + * + * @param WP_Post|object $post Post object. + */ + public function __construct( $post ) { + foreach ( get_object_vars( $post ) as $key => $value ) { + $this->$key = $value; + } + } + + /** + * Isset-er. + * + * @since 3.5.0 + * + * @param string $key Property to check if set. + * @return bool + */ + public function __isset( $key ) { + if ( 'ancestors' === $key ) { + return true; + } + + if ( 'page_template' === $key ) { + return true; + } + + if ( 'post_category' === $key ) { + return true; + } + + if ( 'tags_input' === $key ) { + return true; + } + + return metadata_exists( 'post', $this->ID, $key ); + } + + /** + * Getter. + * + * @since 3.5.0 + * + * @param string $key Key to get. + * @return mixed + */ + public function __get( $key ) { + if ( 'page_template' === $key && $this->__isset( $key ) ) { + return get_post_meta( $this->ID, '_wp_page_template', true ); + } + + if ( 'post_category' === $key ) { + if ( is_object_in_taxonomy( $this->post_type, 'category' ) ) { + $terms = get_the_terms( $this, 'category' ); + } + + if ( empty( $terms ) ) { + return array(); + } + + return wp_list_pluck( $terms, 'term_id' ); + } + + if ( 'tags_input' === $key ) { + if ( is_object_in_taxonomy( $this->post_type, 'post_tag' ) ) { + $terms = get_the_terms( $this, 'post_tag' ); + } + + if ( empty( $terms ) ) { + return array(); + } + + return wp_list_pluck( $terms, 'name' ); + } + + // Rest of the values need filtering. + if ( 'ancestors' === $key ) { + $value = get_post_ancestors( $this ); + } else { + $value = get_post_meta( $this->ID, $key, true ); + } + + if ( $this->filter ) { + $value = sanitize_post_field( $key, $value, $this->ID, $this->filter ); + } + + return $value; + } + + /** + * {@Missing Summary} + * + * @since 3.5.0 + * + * @param string $filter Filter. + * @return WP_Post + */ + public function filter( $filter ) { + if ( $this->filter === $filter ) { + return $this; + } + + if ( 'raw' === $filter ) { + return self::get_instance( $this->ID ); + } + + return sanitize_post( $this, $filter ); + } + + /** + * Convert object to array. + * + * @since 3.5.0 + * + * @return array Object as array. + */ + public function to_array() { + $post = get_object_vars( $this ); + + foreach ( array( 'ancestors', 'page_template', 'post_category', 'tags_input' ) as $key ) { + if ( $this->__isset( $key ) ) { + $post[ $key ] = $this->__get( $key ); + } + } + + return $post; + } +} |