Je dois obtenir le dernier message de mon réseau multisite sur WordPress. Pour le moment, j'utilise ce code pour afficher le dernier message mis à jour après un cycle sur chaque blog_id
:
<?php
$blogs = get_last_updated(' ', 0, 1);
foreach ($blogs AS $blog);
switch_to_blog($blog["blog_id"]);
$lastposts = get_posts('numberposts=1&orderby=date');
foreach($lastposts as $post) : setup_postdata($post);?>
Mais si je veux obtenir le dernier message - pas le dernier message mis à jour - comment puis-je le faire? Parce que si je modifie et actualise un message, je le reçois comme le dernier sur la page principale. Mais ce n'est pas le vrai dernier post.
Update - C'est la version complète, j'ai aussi utilisé le restore_current_blog ():
<?php
$blogs = get_last_updated(' ', 0, 1);
foreach ($blogs AS $blog);
switch_to_blog($blog["blog_id"]);
$lastposts = get_posts('numberposts=1&orderby=date');
foreach($lastposts as $post) : setup_postdata($post);?>
<div class="container-img">
<a class="anteprima_princ" href="<?php echo get_page_link($post->ID); ?>" title="Permanent Link to <?php the_title(); ?>"><?php the_post_thumbnail('immagine-principale'); ?></a>
</div>
<h2 class="entrytitlepost"><a href="<?php echo get_page_link($post->ID); ?>" title="<?php echo $post->post_title; ?>"><?php the_title(); ?></a></h2>
<div class="post-content-princ">
<p><?php the_content_rss('...', FALSE, '', 40); ?></p>
<div id="lt">
<div id="leggitutto"><div id="croce"><div id="alto"></div><div id="largo"></div></div><a class="lt" href="<?php echo get_page_link($post->ID); ?>" title="<?php echo $post->post_title; ?>">LEGGI TUTTO</a></div>
</div>
</div>
<?php endforeach ; ?>
<?php restore_current_blog(); //switched back to main site ?>
Le paramètre orderby
- doit être post_date
au lieu de date.
votre code ressemblerait à ceci:
$blogs = get_last_updated(' ', 0, 1);
foreach ($blogs AS $blog) {
switch_to_blog($blog["blog_id"]);
$args = array(
'orderby' => 'post_date',
'order' => 'DESC',
'numberposts' => 1,
'post_type' => 'post',
'post_status' => 'publish',
'suppress_filters' => true
);
$lastposts = get_posts( $args );
foreach($lastposts as $thispost) {
setup_postdata($thispost);
}
restore_current_blog();
}
N'oubliez pas d'appeler restore_current_blog()
dans votre foreach
. Si vous avez utilisé switch_to_blog()
plusieurs fois avant d'appeler restore_current_blog()
, cela ne fonctionnera plus.
La réponse de @ fischi apparaît pour répondre à la question que vous avez posée; Je suggère cela uniquement comme alternative.
Vous pouvez créer/mettre à jour une option de site chaque fois qu'une nouvelle publication est publiée:
add_action( 'new_to_publish', 'wpse133433_latest_post' );
function wpse_133433_latest_post( $post ) {
$blog_id = get_current_blog_id();
$latest = array(
'blog_id' => $blog_id,
'post_id' => $post->ID,
);
update_site_option( 'latest_post_in_network', $latest );
}
Ensuite, pour le vérifier:
$latest = get_site_option( 'latest_post_in_network' );
// should return an array with blog_id and post_id
draft_to_publish
, pending_to_publish
, etc.$latest
du premier bloc de code peut également contenir plus d’informations. Vous pouvez, par exemple, ajouter l'heure actuelle pour que, lorsque vous exécutez votre get_site_option()
, vous ayez immédiatement accès à l'heure de la dernière mise à jour ainsi qu'à ses blog_id
et post_id
.