123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- <?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;
- }
- }
|