jetpack icon indicating copy to clipboard operation
jetpack copied to clipboard

Use get_queried_object_id() as a more reliable way to get wp_cache_post_id()

Open firasd opened this issue 9 years ago • 1 comments

On our site the wp_cache_post_id function is throwing an error:

PHP Fatal error: Cannot use object of type WP_Query as array in public_html/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 1278

This is the function. It turns out that the way the things are setup, while is_page() is true, $posts[0]->ID does not contain the expected variable.

function wp_cache_post_id() {
    global $posts, $comment_post_ID, $post_ID;
    // We try hard all options. More frequent first.
    if ($post_ID > 0 ) return $post_ID;
    if ($comment_post_ID > 0 )  return $comment_post_ID;
    if (is_single() || is_page()) return $posts[0]->ID;
    if (isset( $_GET[ 'p' ] ) && $_GET['p'] > 0) return $_GET['p'];
    if (isset( $_POST[ 'p' ] ) && $_POST['p'] > 0) return $_POST['p'];
    return 0;
}

If I change the function by first checking if(get_queried_object_id()) return get_queried_object_id();, our page loads fine without throwing the fatal error:

function wp_cache_post_id() {
    global $posts, $comment_post_ID, $post_ID;
    // We try hard all options. More frequent first.
    if(get_queried_object_id()) return get_queried_object_id();
    if ($post_ID > 0 ) return $post_ID;
    if ($comment_post_ID > 0 )  return $comment_post_ID;
    if (is_single() || is_page()) return $posts[0]->ID;
    if (isset( $_GET[ 'p' ] ) && $_GET['p'] > 0) return $_GET['p'];
    if (isset( $_POST[ 'p' ] ) && $_POST['p'] > 0) return $_POST['p'];
    return 0;
}

Update: it turns out that the theme we were using was incorrectly overwriting the $posts variable for a separate query. I fixed that, however I think updating wp_cache_post_id() to use get_queried_object_id() as a first resort would still be a good idea.

firasd avatar Mar 21 '16 03:03 firasd

I got the same problem. Thanks @firasd for the solution.

rilwis avatar Jan 03 '17 01:01 rilwis