最近两周一直在忙一个基于BuddyPress的项目,从选定BuddyPress,到项目上线,中间踩了不少原本不曾料想的坑,争取尽可能多的总结出来。
首先,和WooCommerce一样,要对BuddyPress进行主题定制,就要先在自己主题根目录下新建一个buddypress.php的模板,所有外围框架样式都可以往这个模板上堆,这里就不扩展了。
其次,如需要对BuddyPress的主题、结构等做更多定制,就要在主题根目录下新建一个buddypress文件夹,把插件目录\plugins\buddypress\bp-templates\bp-legacy\buddypress内的所有文件都复制进来;另外还要把\plugins\buddypress\bp-templates\bp-legacy\css下的buddypress.css复制到主题的css文件夹下;如果你是基于WP自带主题,比如twentyeleven开发的,还需要把twentyeleven.css放到主题的css文件夹下,并且重命名为buddypress-twentyeleven.css。
以上步骤一个都不能漏,否则等着踩更多的坑吧。
下面先贴一些开发过程中找到或者自己总结、修改的一些实用函数,基本都可以写入主题的function.php。值得一提的是,Google能搜到的很多代码是不可用的,也包括BuddyPress官方网站的部分多年前的帖子,BP应该是经历过一些较大的更新,所以如果要确认代码是否可用,最好到这个网站http://buddypress.wp-a2z.org/ 去查一下是其中的函数/钩子等名称是否有效。
设置默认的封面图片和尺寸
BP默认的用户中心封面图片是一片灰色的空白区域,不是所有用户都热衷于自定义这张图片的,所以还是给懒人们安排一张默认图片为好:
1 2 3 4 5 6 7 8 | function your_theme_xprofile_cover_image( $settings = array() ) { $settings['width'] = 1180; $settings['height'] = 170; $settings['default_cover'] = get_template_directory_uri().'/images/default_cover_image.jpg'; return $settings; } add_filter( 'bp_before_xprofile_cover_image_settings_parse_args', 'your_theme_xprofile_cover_image', 10, 1 ); add_filter( 'bp_before_groups_cover_image_settings_parse_args', 'your_theme_xprofile_cover_image', 10, 1 ); |
修改默认用户头像
同样,不是所有用户都喜欢上传头像的,为了不使版面变得混乱,也可以给用户默认一个头像。
1 2 3 4 5 6 7 8 9 | //首先要把Gavatar头像禁用掉 add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' ); //定义默认头像 function bp_custom_set_avatar_constants() { define ( 'BP_AVATAR_DEFAULT', get_template_directory_uri().'/images/default_avata.jpg' ); define ( 'BP_AVATAR_DEFAULT_THUMB', get_template_directory_uri().'/images/default_avata.jpg' ); } add_action( 'bp_init', 'bp_custom_set_avatar_constants', 2 ); |
判断用户是否上传了自己的头像
如果没有,可以自定义一些东西提示用户上传头像,很有用
1 2 3 4 | bp_get_user_has_avatar( bp_loggedin_user_id() ); //判断当前登录的用户是否有头像 bp_get_user_has_avatar( bp_get_activity_user_id() ) ); //判断循环中的用户是否有头像 bp_activity_user_id(); //这个函数会直接输出循环中的用户ID |
修改用户登录后的跳转页面
在某些时候我们并不希望用户看到WP后台,甚至不希望用户察觉网站是WP做的。但无论是管理员还是普通用户,登录后都会默认跳转到后台。以下代码定义登录后的跳转页面。
1 2 3 4 5 6 7 8 9 10 11 | function bp_brain1981_redirect_to_profile( $redirect_to_calculated, $redirect_url_specified, $user ){ if( empty( $redirect_to_calculated ) ) $redirect_to_calculated=$redirect_url_specified; if( !is_super_admin( $user->ID ) ) //return bp_core_get_user_domain( $user->ID ) . 'profile/'; return bp_core_get_user_domain( $user->ID );//bp默认的用户中心首页 else return $redirect_to_calculated; /*if site admin or not logged in,do not do anything much*/ } add_filter("login_redirect","bp_brain1981_redirect_to_profile",100,3); |
*使用以上代码的前提是我们还需要自己定制bp的登录页面、找回密码页面,这些我今后会另外开贴总结。
隐藏顶部导航条
既然要把后台藏起来,那么顶部那根黑色导航条自然也是不能出现的,在非管理员的状态下要藏起来。
1 2 3 4 5 | function bp_brain1981_remove_admin_bar() { if( !is_super_admin() ) add_filter( 'show_admin_bar', '__return_false' ); } add_action('wp', 'bp_brain1981_remove_admin_bar'); |
过滤首页的消息流/帖子
BP默认会把用户状态、用户自己的信息修改(比如改了个头像、改了个自我介绍等)都显示在首页,这样真正有用的帖子就会很快被冲下去,我们在首页要把消息流过滤一下。以下代码还可以定制排序、过滤评价等,见注释掉的部分
1 2 3 4 5 6 7 8 9 10 11 | function bp_brain1981_filtering_activity( $retval ) { if ( !bp_is_user_activity() ) {//只在首页过滤,在用户中心不过滤 $retval['action'] = 'activity_update'; //$retval['action'] = 'activity_update';//activity_update,profile_updated/new_forum_post/new_blog_post //$retval['sort'] = 'ASC'; //default DESC //$retval['display_comments'] = false; //$retval['per_page'] = 5;//change the number of activity } return $retval; } add_filter( 'bp_after_has_activities_parse_args', 'bp_brain1981_filtering_activity' ); |
给用户中心某个模块增加子模块
以下代码是在settings中增加了一个名为“My Own Setting”的子模块:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | function brain1981_buddypress_tab() { global $bp; bp_core_new_subnav_item( array( 'name' => __( 'My Own Setting', 'buddypress_login' ), 'slug' => 'email-pwd', 'parent_url' => $bp->loggedin_user->domain . $bp->bp_nav['settings']['slug'] . '/', 'parent_slug' => $bp->bp_nav['settings']['slug'], 'position' => 100, 'screen_function' => 'brain1981_budypress_recent_posts', 'show_for_displayed_user' => true, 'item_css_id' => 'brain1981_budypress_recent_posts' ) ); } add_action( 'bp_setup_nav', 'brain1981_buddypress_tab', 1000 ); function brain1981_budypress_recent_posts () { add_action( 'bp_template_title', 'brain1981_buddypress_recent_posts_title' ); add_action( 'bp_template_content', 'brain1981_buddypress_recent_posts_content' ); bp_core_load_template( get_template_directory_uri().'/buddypress/members/single/settings.php' ); } function brain1981_buddypress_recent_posts_title() { _e( 'My Own Setting', 'buddypress_login' ); } function brain1981_buddypress_recent_posts_content() { //do something on the sub page } |
本文会陆续修订,待续…
本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/1413.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。
过滤首页的消息流/帖子
博主能详细讲解一下吗?
很抱歉,每次用到BP的时候都是临时查官方文档和用谷歌搜索可用的代码,至今我还没有时间去分析这套系统,因此无法做什么讲解
如果你有问题建议用谷歌或去官方论坛搜索关键字,BP的答案资源在国外还是非常多的。
顶博主一下子!博主辛苦了!