是否可以为特定组调用 bp_get_options_nav() ?我需要在具有已定义帖子类型的每个帖子中获得相同的组内导航。
帖子通过 slugs 与 Groups 相关联,并且该组都具有 post id 的 meta 和 post 具有 group id 的 meta (组是从帖子创建的),我试图使它们之间的导航无缝。
是否可以为特定组调用 bp_get_options_nav() ?我需要在具有已定义帖子类型的每个帖子中获得相同的组内导航。
帖子通过 slugs 与 Groups 相关联,并且该组都具有 post id 的 meta 和 post 具有 group id 的 meta (组是从帖子创建的),我试图使它们之间的导航无缝。
阅读此网址:-
http://www.generalthreat.com/2011/10/creating-a-buddypress-group-home-page/
或尝试
创建 BuddyPress 组主页
第一步:为活动流创建一个活动选项卡,因为我们要替换它。
为此,我们将使用 Group Extension API 的一部分来为组创建一个新的导航项。
在主题的 functions.php 中,添加以下内容:
function add_activity_tab() {
global $bp;
if(bp_is_group()) {
bp_core_new_subnav_item(
array(
'name' => 'Activity',
'slug' => 'activity',
'parent_slug' => $bp->groups->current_group->slug,
'parent_url' => bp_get_group_permalink( $bp->groups->current_group ),
'position' => 11,
'item_css_id' => 'nav-activity',
'screen_function' => create_function('',"bp_core_load_template( apply_filters( 'groups_template_group_home', 'groups/single/home' ) );"),
'user_has_access' => 1
)
);
if ( bp_is_current_action( 'activity' ) ) {
add_action( 'bp_template_content_header', create_function( '', 'echo "' . esc_attr( 'Activity' ) . '";' ) );
add_action( 'bp_template_title', create_function( '', 'echo "' . esc_attr( 'Activity' ) . '";' ) );
}
}
}
add_action( 'bp_actions', 'add_activity_tab', 8 );
这会在每个组的导航栏中添加一个名为“活动”的选项卡,指向组内名为“活动”的页面。这个新的活动页面调用与当前主页相同的 groups/single/home.php 模板文件。该模板实际上处理所有组页面的路由,我们稍后会看到。
第二步:为您的群组主页创建模板文件
如果您要拥有一个组主页,您需要控制它的显示方式。为此,您需要在主题的 groups/single 目录中有一个模板文件。它可以任意命名,但对于本指南,我们坚持使用 front.php。
创建此文件并将您想要的任何内容放入其中。该模板将在“组循环”中,因此您可以使用 bp_group_description() 之类的函数来显示组信息。
这是一个例子:
<div class="home-page single-group" role="main">
<?php if(bp_is_item_admin()) { ?>
<div class="notice info">
<p>Welcome to your group home page!<br />
Click <a href="<?php bp_group_admin_permalink() ?>">Admin</a> above to set the content for this page.</p>
</div>
<?php } ?>
<?php bp_group_description(); ?>
</div>
到目前为止,我们所做的只是在组页面上创建一个新的活动选项卡,该选项卡甚至不显示活动流。但最后一块将使一切正常:
第三步:编辑主题的 groups/single/home.php 模板文件
在 home.php 文件中查找此部分:
elseif ( bp_group_is_visible() && bp_is_active( 'activity' ) ) :
locate_template( array( 'groups/single/activity.php' ), true );
elseif ( bp_group_is_visible() ) :
locate_template( array( 'groups/single/members.php' ), true );
这会将访问者引导至活动流或成员列表,具体取决于活动是否已启用。这是一个包罗万象的路由部分,我们将在其中添加我们的组主页。
将上面的行更改为:
elseif ( bp_group_is_visible() && bp_is_group_activity() ) :
locate_template( array( 'groups/single/activity.php' ), true );
elseif ( bp_group_is_visible() ) :
locate_template( array( 'groups/single/front.php' ), true );
这将启用“活动”选项卡并将组主页的请求发送到您的新模板!当然,如果您使用的名称不是front.php,则需要更改该行以匹配您选择的名称。
更新!第四步——让 BuddyPress JS 知道如何对你的新活动帖子进行分类
现在您可以进行活动更新,但 BuddyPress 不会记住它们来自您的小组。为了解决这个问题,我们需要放松对另一个文件 activity/post-form.php 的检查。
<?php elseif ( bp_is_group_home() ) : ?>
<input type="hidden" id="whats-new-post-object" name="whats-new-post-object" value="groups" />
<input type="hidden" id="whats-new-post-in" name="whats-new-post-in" value="<?php bp_group_id(); ?>" />
<?php endif; ?>
如果没有这些隐藏字段,BuddyPress 认为我们只是在发布个人状态更新。所以让我们扩展它以覆盖我们的新活动页面:
<?php elseif ( bp_is_group() ) : ?>
<input type="hidden" id="whats-new-post-object" name="whats-new-post-object" value="groups" />
<input type="hidden" id="whats-new-post-in" name="whats-new-post-in" value="<?php bp_group_id(); ?>" />
<?php endif; ?>
现在,无论我们在群组中的哪个位置发布更新,BuddyPress 都会将更新绑定到一个群组。
就是这样!查看您的新群组主页并享受您的 BuddyPress 黑客攻击的结果。如果您在群组主页上做了一些非常酷的事情,请以我的方式发送链接!