How to get a post from another site in the network

This tutorial is part of our MultilingualPress 2 documentation. In case you are using the newer version 3, please switch to MultilingualPress 3.

Let’s say we have a site id and a post id. The source doesn’t matter, it could be a database, user input, whatever. Now we want to get a WP_Post object from that site.

A first idea might look like this:

switch_to_blog( $site_id );
$post = get_post( $post_id );
restore_current_blog();

But this is not necessary, there is already a function in WordPress for that:

function get_blog_post( $blog_id, $post_id ) {
    switch_to_blog( $blog_id );
    $post = get_post( $post_id );
    restore_current_blog();

    return $post;
}

Nice, but there is an important, subtle bug in that function: it is using get_post( $post_id ) without a check on the post id. If $post_id is 0, NULL or "", get_post() will use an existing global post object or id. But the current global post is from the source site, not from the target site! The id on site 1 references a completely different post than on site 2.
WordPress doesn’t care. So we have to do that check:

$post = NULL;

if ( ! empty ( $post_id ) )
    $post = get_blog_post( $site_id, $post_id );
Inpsyde
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.