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: https://develop.svn.wordpress.org/trunk@20171 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
0459805741
commit
1a41092158
|
@ -430,6 +430,9 @@ function &get_post(&$post, $output = OBJECT, $filter = 'raw') {
|
|||
function get_post_ancestors($post) {
|
||||
$post = get_post($post);
|
||||
|
||||
if ( ! isset( $post->ancestors ) )
|
||||
_get_post_ancestors( $post );
|
||||
|
||||
if ( ! empty( $post->ancestors ) )
|
||||
return $post->ancestors;
|
||||
|
||||
|
@ -4645,12 +4648,12 @@ function _get_post_ancestors(&$_post) {
|
|||
if ( empty($_post->post_parent) || $_post->ID == $_post->post_parent )
|
||||
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) ) ) {
|
||||
// Loop detection: If the ancestor has been seen before, break.
|
||||
if ( ( $ancestor == $_post->ID ) || in_array($ancestor, $_post->ancestors) )
|
||||
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.
|
||||
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);
|
||||
//$type = get_post_type($this->posts[0]);
|
||||
if ( !$post_status_obj->public ) {
|
||||
|
|
Loading…
Reference in New Issue