我必须从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 ?>
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 Transitionsupdate_site_option()
get_site_option()
注意:您需要第一个代码块在网络中的每个站点(您想从中收集帖子)上运行,您可以将其转换为Must Use plugin 或者一个支持网络的插件您可能需要连接到多个过渡后挂钩,即,draft_to_publish
, pending_to_publish
, 等等$latest
第一个代码块中的数组也可以保存更多信息。例如,您可以添加当前时间,以便在执行get_site_option()
, 您可以立即访问最新更新的时间及其blog_id
和post_id
.