我怎样才能从wp MultiSite获得最后一篇帖子?

时间:2014-02-04 作者:Giulio Bambini

我必须从WordPress的多站点网络上获取最后一篇文章。目前,我使用此代码在每个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);?>
但是如果我想得到最后一篇文章,而不是最后一篇文章的更新,我该怎么做呢?因为如果我更改并刷新一篇帖子,我会得到与主页上最后一篇一样的帖子。但这并不是真正的最后一篇帖子。

Update - 这是完整版本,我还使用了restore\\u current\\u 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 个回复
SO网友:fischi

这个orderby-参数应为post_date 而不是日期。

您的代码如下所示:

$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();
}
请别忘了打电话restore_current_blog() 在您的foreach. 如果您使用switch_to_blog() 通话前不止一次restore_current_blog(), 它不会再工作了。

SO网友:Pat J

@fischi的回答似乎回答了您提出的问题;我建议这只是一种选择

您可以在每次发布新帖子时创建/更新站点选项:

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 );
}
然后,检查:

$latest = get_site_option( \'latest_post_in_network\' );
// should return an array with blog_id and post_id
参考文献Post Status Transitions
  • update_site_option()
  • get_site_option()
    • 注意:您需要第一个代码块在网络中的每个站点(您想从中收集帖子)上运行,您可以将其转换为Must Use plugin 或者一个支持网络的插件draft_to_publish, pending_to_publish, 等等$latest 第一个代码块中的数组也可以保存更多信息。例如,您可以添加当前时间,以便在执行get_site_option(), 您可以立即访问最新更新的时间及其blog_idpost_id.

    结束

    相关推荐

    PHP内存限制与WP内存限制

    我正在使用TPC! Memory Usage Settings 监视安装的内存使用情况。插件显示“WP Memory Limit”,我知道它是由wp-config.php. 它还显示“PHP内存限制”,我猜它是由服务器主机在php.ini这可能是一个愚蠢的问题,但“PHP内存限制”是我可能用于“WP内存限制”的内存量吗?例如,如果我的“PHP内存限制”为1000MB, 我是否可以(应该)将wp内存限制设置为1000MB?旁注:该网站是针对一个有许多不同操作的大型网站,因此安装了许多(必要的)插件,许多用户