introduce post & comment classes, props skeltoac, See #12267
git-svn-id: http://svn.automattic.com/wordpress/trunk@13187 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
d472b153ca
commit
79f04413f4
|
@ -1696,4 +1696,102 @@ class WP_MatchesMapRegex {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A factory and constructor that upgrades stdClass "rows" to WordPress classes.
|
||||||
|
class wp_row {
|
||||||
|
// Factory. Call statically to upgrade a stdClass object to its specialized class: $o = wp_row::get($row).
|
||||||
|
function get($row) {
|
||||||
|
if ( is_a($row, 'wp_row') || is_subclass_of($row, 'wp_row') )
|
||||||
|
return $row;
|
||||||
|
|
||||||
|
if ( is_array($row) )
|
||||||
|
$row = (object) $row;
|
||||||
|
|
||||||
|
$class = 'wp_row';
|
||||||
|
if ( isset($row->post_type) ) {
|
||||||
|
if ( class_exists("wp_" . $row->post_type) )
|
||||||
|
$class = "wp_" . $row->post_type;
|
||||||
|
else
|
||||||
|
$class = "wp_post";
|
||||||
|
} elseif ( isset($row->comment_type) ) {
|
||||||
|
if ( class_exists("wp_" . $row->comment_type) )
|
||||||
|
$class = "wp_" . $row->comment_type;
|
||||||
|
else
|
||||||
|
$class = "wp_comment";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( function_exists("apply_filters") ) {
|
||||||
|
$filtered_class = apply_filters("wp_row_class", $class, $row);
|
||||||
|
if ( class_exists($filtered_class) )
|
||||||
|
$class = $filtered_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
return call_user_func(array($class, 'get'), $row);
|
||||||
|
}
|
||||||
|
|
||||||
|
function wp_row(&$row) {
|
||||||
|
return $this->__construct($row);
|
||||||
|
}
|
||||||
|
|
||||||
|
function __construct($row) {
|
||||||
|
if ( is_array($row) )
|
||||||
|
$row = (object) $row;
|
||||||
|
|
||||||
|
foreach ( (array) $row as $k => $v )
|
||||||
|
$this->$k = $row->$k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class wp_post extends wp_row {
|
||||||
|
// Factory
|
||||||
|
function get($post) {
|
||||||
|
if ( $post = get_post($post) )
|
||||||
|
return new wp_post($post);
|
||||||
|
else
|
||||||
|
return new WP_Error(404, "Post not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
function id() { return $this->ID; }
|
||||||
|
function post_id() { return $this->ID; }
|
||||||
|
function type_id() { return 'post-' . $this->ID; }
|
||||||
|
function classes($class='') { return join( ' ', get_post_class( $class, $this->id() ) ); }
|
||||||
|
|
||||||
|
function permalink() { return get_permalink($this); }
|
||||||
|
function title() { return get_the_title($this); }
|
||||||
|
function date($format='') { return; }
|
||||||
|
function time($format='') { return get_the_time($format, $this); }
|
||||||
|
function author() { $authordata = get_userdata($this->post_author); return $authordata->display_name; }
|
||||||
|
function content() { return get_content($this); }
|
||||||
|
}
|
||||||
|
|
||||||
|
class wp_comment extends wp_row {
|
||||||
|
// Factory
|
||||||
|
function get($comment) {
|
||||||
|
if ( $comment = get_comment($comment) )
|
||||||
|
return new wp_comment($comment);
|
||||||
|
else
|
||||||
|
return new WP_Error(404, "Comment not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
function id() { return $this->comment_ID; }
|
||||||
|
function post_id() { return $this->comment_post_ID; }
|
||||||
|
function type_id() { return 'comment-' . $this->comment_ID; }
|
||||||
|
function classes($class='') { return join( ' ', get_comment_class( $class, $this->id() ) ); }
|
||||||
|
|
||||||
|
function permalink() { return get_comment_link($this); }
|
||||||
|
function title() { return sprintf(__("Comment on %s"), get_the_title($this->post_id())); }
|
||||||
|
function time($format='') { return mysql2date($format?$format:get_option('time_format'), $this->comment_date); }
|
||||||
|
function date($format='') { return date($format?$format:get_option('date_format'), $this->time('U')); }
|
||||||
|
function author() { return $this->comment_author; }
|
||||||
|
function excerpt() { return $this->comment_content; }
|
||||||
|
function content() { return get_comment_content($this); }
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_post($object) {
|
||||||
|
return is_a('wp_post', $object);
|
||||||
|
}
|
||||||
|
|
||||||
|
function is_comment($object) {
|
||||||
|
return is_a('wp_comment', $object);
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -2302,6 +2302,10 @@ class WP_Query {
|
||||||
if ( !$q['suppress_filters'] )
|
if ( !$q['suppress_filters'] )
|
||||||
$this->posts = apply_filters('posts_results', $this->posts);
|
$this->posts = apply_filters('posts_results', $this->posts);
|
||||||
|
|
||||||
|
// Turn each row into a classed object, e.g. wp_post, wp_comment.
|
||||||
|
if ( is_array($this->posts) )
|
||||||
|
$this->posts = array_map(array('wp_row', 'get'), $this->posts);
|
||||||
|
|
||||||
if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) {
|
if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) {
|
||||||
$cjoin = apply_filters('comment_feed_join', '');
|
$cjoin = apply_filters('comment_feed_join', '');
|
||||||
$cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = '{$this->posts[0]->ID}' AND comment_approved = '1'");
|
$cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = '{$this->posts[0]->ID}' AND comment_approved = '1'");
|
||||||
|
|
Loading…
Reference in New Issue