Wordpress多站点buddypress首页调用全站文章新方法
来源: 阅读:959 次 日期:2014-09-02 14:45:10
温馨提示: 小编为您整理了“Wordpress多站点buddypress首页调用全站文章新方法”,方便广大网友查阅!

今天专门研究了一下wordpress开通多站点成为一个博客群网站之后,安装buddypress成为社区,怎样调用全站最新更新的内容到首页的问题。

在《wordpress多站点调用全站所有子站点最新文章函数化》一文中给出一个使用数据库进行调用,同时利用php遍历和冒泡比较的方法,获得了一个可以用来实现该功能的方法。但是这种操作还是存在一些不够全面的问题。我们在安装buddypress插件之后,整个博客成为一个社区,bp会为wordpress多站点建立一些新的数据表,以保存社区的信息,并有一些核心函数,实现这些信息的调用。

在buddypress中,使用

if(bp_has_activities(array('action' => 'new_blog_post','max' => get_option('posts_per_page'),'per_page' => get_option('posts_per_page'),'user_id' => 0,'scope' => false,'object' => false,'primary_id' => false ))) :

while(bp_activities()) : bp_the_activity();

endwhile;

endif;

来实现如wordpress中query_posts();while(have_posts):the_post();endwhile;一样的文章循环功能。在wordpress的LOOP中的$post换成了$activities_template->activity。我们可以利用里面的很多信息。

废话不多说,看看我是怎么实现多站点下全站最新文章调用的:

$mu_posts = array();

$i = 0;

if(bp_has_activities(array('action' => 'new_blog_post','max' => get_option('posts_per_page'),'per_page' => get_option('posts_per_page'),'user_id' => 0,'scope' => false,'object' => false,'primary_id' => false ))) :

while(bp_activities()) : bp_the_activity();

$mu_posts[$i]['blog_id'] = $activities_template->activity->item_id;

$mu_posts[$i]['post_id'] = $activities_template->activity->secondary_item_id;

$mu_posts[$i]['post_author'] = $activities_template->activity->user_nicename;

$i ++;//执行结束后,i==1表示有一篇文章,第一篇文章的下标为[0]

endwhile;

endif;

上面这段代码利用buddypress的特性,将一些信息记录在$mu_posts数组中。

<?php if(!empty($mu_posts)): ?>

<ul id="blog-post-list" class="activity-list item-list">

<?php foreach($mu_posts as $mu_post): ?>

<?php $blog_id = $mu_post['blog_id'];$post_id = $mu_post['post_id'];$post_author = $mu_post['post_author']; ?>

<?php $blog_name = get_blog_option($blog_id,'blogname');$blog_url = get_blog_option($blog_id,'siteurl'); ?>

<?php $post = get_blog_post($blog_id,$post_id);setup_postdata($post); ?>

<li>

<h1 class="activity-title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" target="_blank"><?php the_title(); ?></a></h1>

<div class="activity-content">

<div class="activity-header">

<span><a href="<?php echo get_blog_option(1,'siteurl'); ?>/members/<?php echo $post_author; ?>/"><?php the_author(); ?></a></span>

<span><?php the_date(); ?></span>

发布在站点

<span><a href="<?php echo $blog_url; ?>" target="_blank"><?php echo $blog_name; ?></a></span>

<?php if($post->comment_count > 0)echo '<span><a href="'.get_permalink().'#comment" target="_blank">有评论'.$post->comment_count.'条</a></span>'; ?>

</div>

<div class="activity-inner">

<?php

$content = get_the_content();

$content = strip_tags($content,'');

$content = trim(mb_strimwidth($content,0,500,'...'));

//$content = close_html_tags($content);

echo wpautop($content);

?>

<p class="read-more"><a href="<?php the_permalink(); ?>" target="_blank">查看原文</a></p>

</div>

</div>

</li>

<?php endforeach; ?>

</ul>

<?php endif; ?>

这一段代码可以放在上面那段代码之后,利用之前获取的信息,得到文章对应的$blog_id和$post_id,再结合wordpress多站点函数就能调用出各种你想要的内容。参考站点:南昌大学“前湖之风”周末讲坛联络处博客系统

同时,这个地方还用到了setup_postdata($post);这个函数在wordpress中很少被重视,我们用get_post($post_id)获取一篇文章之后,可以利用setup_postdata($post);函数进行格式化,它后面就可以像wordpress中利用the_title()、the_content()等这样在loop循环中使用的和文章相关的函数了。

这一方法我从探索到实现花费了两天时间,主要困难在于理解buddypress的数据、函数等,同时还会遇到很多系统核心的问题,通过不同算法的尝试,最终确定了这种有效的调用方式。

更多信息请查看IT技术专栏

更多信息请查看CMS教程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map