2

是否可以为特定组调用 bp_get_options_nav() ?我需要在具有已定义帖子类型的每个帖子中获得相同的组内导航。

帖子通过 slugs 与 Groups 相关联,并且该组都具有 post id 的 meta 和 post 具有 group id 的 meta (组是从帖子创建的),我试图使它们之间的导航无缝。

4

1 回答 1

2

阅读此网址:-

http://www.generalthreat.com/2011/10/creating-a-buddypress-group-home-page/

https://wordpress.stackexchange.com/questions/58485/adding-navigation-item-page-for-quick-chat-plugin-to-each-of-my-buddypress-group

或尝试

创建 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 黑客攻击的结果。如果您在群组主页上做了一些非常酷的事情,请以我的方式发送链接!

于 2012-08-02T16:07:24.153 回答