Call _get_post_ancestors() from get_post_ancestors() if the ancestors property is not set in the post object. Works around situations where ancestors is not set in the cached version of the post object. see #18536
git-svn-id: http://svn.automattic.com/wordpress/trunk@20171 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
f76fd8e6e6
commit
6241238938
|
@ -430,7 +430,10 @@ function &get_post(&$post, $output = OBJECT, $filter = 'raw') {
|
||||||
function get_post_ancestors($post) {
|
function get_post_ancestors($post) {
|
||||||
$post = get_post($post);
|
$post = get_post($post);
|
||||||
|
|
||||||
if ( !empty($post->ancestors) )
|
if ( ! isset( $post->ancestors ) )
|
||||||
|
_get_post_ancestors( $post );
|
||||||
|
|
||||||
|
if ( ! empty( $post->ancestors ) )
|
||||||
return $post->ancestors;
|
return $post->ancestors;
|
||||||
|
|
||||||
return array();
|
return array();
|
||||||
|
@ -4645,12 +4648,12 @@ function _get_post_ancestors(&$_post) {
|
||||||
if ( empty($_post->post_parent) || $_post->ID == $_post->post_parent )
|
if ( empty($_post->post_parent) || $_post->ID == $_post->post_parent )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
$id = $_post->ancestors[] = $_post->post_parent;
|
$id = $_post->ancestors[] = (int) $_post->post_parent;
|
||||||
while ( $ancestor = $wpdb->get_var( $wpdb->prepare("SELECT `post_parent` FROM $wpdb->posts WHERE ID = %d LIMIT 1", $id) ) ) {
|
while ( $ancestor = $wpdb->get_var( $wpdb->prepare("SELECT `post_parent` FROM $wpdb->posts WHERE ID = %d LIMIT 1", $id) ) ) {
|
||||||
// Loop detection: If the ancestor has been seen before, break.
|
// Loop detection: If the ancestor has been seen before, break.
|
||||||
if ( ( $ancestor == $_post->ID ) || in_array($ancestor, $_post->ancestors) )
|
if ( ( $ancestor == $_post->ID ) || in_array($ancestor, $_post->ancestors) )
|
||||||
break;
|
break;
|
||||||
$id = $_post->ancestors[] = $ancestor;
|
$id = $_post->ancestors[] = (int) $ancestor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2671,7 +2671,7 @@ class WP_Query {
|
||||||
|
|
||||||
// Check post status to determine if post should be displayed.
|
// Check post status to determine if post should be displayed.
|
||||||
if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) {
|
if ( !empty($this->posts) && ($this->is_single || $this->is_page) ) {
|
||||||
$status = get_post_status($this->posts[0]);
|
$status = get_post_status($this->posts[0]->ID);
|
||||||
$post_status_obj = get_post_status_object($status);
|
$post_status_obj = get_post_status_object($status);
|
||||||
//$type = get_post_type($this->posts[0]);
|
//$type = get_post_type($this->posts[0]);
|
||||||
if ( !$post_status_obj->public ) {
|
if ( !$post_status_obj->public ) {
|
||||||
|
|
Loading…
Reference in New Issue