web-dev-qa-db-fra.com

Comment puis-je obtenir le dernier message de wp multisite?

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 ?>
2
Giulio Bambini

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.

3
fischi

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

Références

Remarques

  • Vous avez besoin du premier bloc de code pour s'exécuter sur tous les sites de votre réseau (sur lesquels vous souhaitez collecter des publications) - vous pouvez en faire un Doit utiliser un plugin ou un plugin activé pour le réseau.
  • Vous devrez peut-être vous connecter à plus d'un point d'ancrage post-transition - c.-à-d. draft_to_publish, pending_to_publish, etc.
  • Le tableau $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.
2
Pat J