• File: class-wp-post.php
  • Full Path: /home/u505525515/domains/medineeestates.com/public_html/wp-includes/class-wp-post.php
  • Date Modified: 05/25/2026 6:29 AM
  • File size: 6.33 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?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 <= 0 ) {
            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 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;
    }
}