Heb je een WordPress multisite en wil je op één (of meerdere) sites posts van een andere site binnen het multisite-netwerk tonen? Met onderstaande code kan je dit voor elkaar krijgen.
Posts van een subsite tonen met een loop
Met onderstaande code maak je een get_posts
loop, welke je met parameters aan kan passen naar eigen wens. Dit voorbeeld is vrij basic, maar als je de loop meer wilt customizen, bekijk dan eens de WordPress documentatie.
Site ID achterhalen
Om posts van een subsite te kunnen tonen moet WordPress eerst weten van welke subsite je de posts wil ophalen. Dit doen we aan de hand van een blog ID (blog_id
). In onderstaand voorbeeld wordt een loop gemaakt van posts die zijn gemaakt in de website met blog_id
2. Dit is doorgaans de eerste subsite die je aanmaakt in een multisite netwerk.
De ID van de site waar je de posts van wilt tonen kan je achterhalen door te gaan naar jouwsite.nl/wp-admin/network/sites.php. Klik vervolgens de site aan in de lijst, en in de adresbalk verschijnt dan achter de URL, bijvoorbeeld: /site-info.php?id=2. De ID van de site is in dit geval dus 2.

Deze code kan je plaatsen in de paginatemplate(s) waar je wil dat deze posts verschijnen, bijvoorbeeld in index.php of page.php.
Lees hier hoe je een site specifieke plugin maakt.
<?php
/**
* Get posts from a single multisite subsite.
*/
global $switched;
switch_to_blog(2); //switched to blog id 2
// Get latest Post
$args = array(
'posts_per_page' => -1, // Show all posts
'orderby' => 'date', // Order posts by date
'order' => 'DESC', // Show newest posts to oldest
'post_type' => 'post', // Default set to post
);
$latest_posts = get_posts( $args );
$cnt = 0;
?>
<ul>
<?php foreach($latest_posts as $post) : setup_postdata($post);?>
<li>
<a href="<?php echo get_page_link($post->ID); ?>" title="<?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a>
</li>
<?php endforeach ; ?>
</ul>
<?php restore_current_blog(); //switched back to main site ?>
Een functie gebruiken voor de query
Je kan deze loop ook in een functie verwerken in je functions.php bestand of een site-specifieke plugin, zodat je in je pagina-template de posts kan tonen door de functie in je template te plaatsen. Bijvoorbeeld:
<?php
/**
* Get posts from a single multisite subsite.
*
* This goes in your theme's functions.php
* or your site-specific plugin.
*/
function wpsimpel_subsite_posts() {
// The code from the above snippet goes here
}
In je template-bestand (bijvoorbeeld home.php, index.php of je eigen paginatemplate) plaats je vervolgens de functie:
<?php wpsimpel_subsite_posts(); ?>
Posts van alle subsites tonen met een loop
Het is ook mogelijk om alle posts van alle subsites op te halen met een WP_Query
en deze te tonen in een loop. In onderstaand voorbeeld haal ik eerst alle subsites op, en toon ik vervolgens de posts geordend per subsite.
<?php
/**
* Get posts from all multisite subsites.
*/
// First we query all subsites
$subsites = get_sites();
// Then we loop through subsites
foreach( $subsites as $subsite ) {
// Get the ID per subsite
$subsite_id = get_current_blog_id();
// Switch to subsites
switch_to_blog( $subsite_id );
// Get the subsite name in case we want to separate posts by subsite
$subsite_name = get_blog_details( $subsite_id )->blogname;
// Echo the subsite name
echo '<h2>' . $subsite_name . '</h2>';
// Arguments for our query
$args = array(
'posts_per_page' => -1, // Show all posts
'orderby' => 'date', // Order posts by date
'order' => 'DESC', // Show newest posts to oldest
'post_type' => 'post', // Default set to post
);
// The query variable
$query = new WP_Query($args);
// The actual query
if ( $query->have_posts() ) {
while ( $query->have_posts() ) : $query->the_post();
// Setting some variables to use in the template
$post_id = get_the_ID() . '-' . $subsite_id;
$post_date = get_the_date();
$post_thumbnail = get_the_post_thumbnail();
$post_excerpt = get_the_excerpt();
?>
<article id="post-<?php echo $post_id; ?>" <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ) ?>
<span class="entry-meta"><?php echo $post_date; ?></span>
</header>
<?php if( $post_thumbnail ) :?>
<figure class="post-thumbnail">
<?php echo $post_thumbnail; ?>
</figure><!-- .post-thumbnail -->
<?php endif; ?>
<div class="entry-content">
<?php echo $post_excerpt; ?>
</div>
</article>
<?php endwhile;
restore_current_blog();
}
}
Een functie gebruiken voor de query
Net als het eerste voorbeeld kan je ook deze loop in een functie verwerken in je functions.php bestand of een site-specifieke plugin. Bijvoorbeeld:
<?php
/**
* Get posts from all multisite subsites.
*
* This goes in your theme's functions.php
* or your site-specific plugin.
*/
function wpsimpel_all_multisite_posts() {
// The code from the above snippet goes here
}
In je template-bestand (bijvoorbeeld home.php, index.php of je eigen paginatemplate) plaats je vervolgens de functie:
<?php wpsimpel_all_multisite_posts(); ?>