mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-28 12:07:36 +01:00
0860bb2771
Prior to about 2013, many class methods lacked even access modifiers which made the `@access` notations that much more useful. Now that we've gotten to a point where the codebase is more mature from a maintenance perspective and we can finally remove these notations. Notable exceptions to this change include standalone functions notated as private as well as some classes still considered to represent "private" APIs. See #41452. Built from https://develop.svn.wordpress.org/trunk@41162 git-svn-id: http://core.svn.wordpress.org/trunk@41002 1a063a9b-81f0-0310-95a4-ce76da25c4cd
375 lines
6.2 KiB
PHP
375 lines
6.2 KiB
PHP
<?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 array $ancestors
|
|
* @property-read int $post_category
|
|
* @property-read string $tag_input
|
|
*
|
|
*/
|
|
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
|
|
* @static
|
|
*
|
|
* @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 ) ) {
|
|
$_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 self|array|bool|object|WP_Post
|
|
*/
|
|
public function filter( $filter ) {
|
|
if ( $this->filter == $filter )
|
|
return $this;
|
|
|
|
if ( $filter == 'raw' )
|
|
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;
|
|
}
|
|
}
|