WordPress + bbPress Integration 101
-
There are way too many integration questions lately so I am going to try to gather some current info here.
This is an unofficial help guide to try to make a fairly straightforward operation as painless as possible. Feel free to contribute and we’ll edit as necessary.
There is a “power user” shortcut below, but I am also going to try to explain more of the concepts so integration is less “magic” and easier to understand.
With bbPress 0.9, integration is “officially” supported and there is an attempt to make it much easier to accomplish during install but it’s not flawless by any means because of the wide range of possible configurations by users.
update: for adventurous bbPress users, a 1.0 alpha is available that should integrate with WordPress 2.6 – however it is not possible to downgrade back to bbPress 0.9 (because of database changes) afterwards so please keep that in mind – also there are three new items that have to be sync’ed between WP 2.7 and bb 1.0
As of February 2009 it is now possible to use WordPress 2.6, 2.7 or 2.8 with bbPress 0.9 where previously you had to use the unstable bbPress 1.0 alpha. Although WordPress has radically changed the way cookies are used in those versions compared to 2.5, you can either downgrade the WordPress cookie method to the one used in 2.5 via this plugin or you can allow bbPress 0.9 to use the newer WordPress cookies via this plugin.
Keep in mind if you are already using bbPress 1.0 you cannot simply downgrade to bbPress 0.9 because of database changes. However you can always upgrade from bbPress 0.9 to 1.0, so please start with 0.9 instead of 1.0 alpha when possible.
To integrate with WordPress 2.3 see here for extra instructions..
ATTENTION PHP 4 users with WordPress 2.5.0 (aka 2.5)
You MUST upgrade to 2.5.1 – there is a compatibility bug.
Assuming you have access to your bbPress admin area, virtually all integration adjustments (as of 0.9) after installation can now be made at
http://your-website-url.com/your-bbpress-directory/bb-admin/options-wordpress.php
If you’ve lost admin access or it’s not working correctly, most adjustments can be done instead via simple edits to the bb-config.php (and wp-config.php) files. I personally prefer this
bb-config.php
method because it will override any mistakes in the database regardless.TABLE OF CONTENTS:
- Instant Integration for Power Users
- Regular, Reverse & Complex Integration
- Levels (or Depth) of Integration
- Installation locations for WordPress vs bbPress
- The Shared User List (table)
- WordPress & bbPress Cookies
- Integrating WordPress and bbPress Roles
- Loss of Admin Access
- Users Registered via bbPress appear as “anonymous” in WordPress
- Security Considerations when Integrated
.
(there is also a wealth of experience available via the “integration” tag on the forum here)
-
== Instant Integration for Power Users ==
If you’ve just installed bbPress 0.9 into a WordPress 2.5 website and followed the integration setup questions but it’s just not integrating correctly and you feel you are fairly web savvy you can try this “shortcut”. (Or read the other posts below for more “theory”.)
** If you have lost admin access entirely, do steps #4+ first and then come back to 1,2,3
1. open this url in a browser window to edit:
http://your-website-url.com/bbpress/bb-admin/options-wordpress.php
(/bbpress/ is your install directory for bbpress)
2. open this url in another browser window for reference:
http://your-website-url.com/wordpress/wp-admin/options.php
(/wordpress/ is your install directory for wordpress)
3. you MUST copy the secret text
from
/wordpress/wp-admin/options.php
to WordPress database secret
on
/bbpress/bb-admin/options-wordpress.php
They *MUST* be IDENTICAL
4. open to Edit
bb-config.php
in the bbPress directory5. open to Edit
wp-config.php
in the WordPress directory6. bbPress 0.9
the
define("SECRET_KEY","blahblahblah")
inyour WordPress
wp-config.php
MUST MATCH thedefine("BB_SECRET_KEY","blahblahblah")
inyour bbPress
bb-config.php
bbPress 1.0
instead of SECRET_KEY in 1.0 there are 3 replacements
AUTH_KEY
SECURE_AUTH_KEY
LOGGED_IN_KEY
you can go here to generate a complex secret_key(s):
bbPress 0.9: https://api.wordpress.org/secret-key/1.0/
bbPress 1.0: https://api.wordpress.org/secret-key/1.1/
(note you must add the BB_ part for the bb-config.php)
7. Copy all these items into the bottom of bb-config.php and edit as required:
$bb->wp_siteurl = 'http://your-site-url.com/blog/';
// that’s your WordPress URL, not bbPress
$bb->wp_home = 'http://your-site-url.com/blog/';
// almost always the same as siteurl unless you tinker
$bb->wp_table_prefix = 'wp_';
// should almost always be wp_ unless you tinkered
$bb->user_bbdb_name = 'username_wordpress';
// this is the MYSQL database name for *WordPress*
// you can copy it right out of WordPress !
$bb->user_bbdb_user = 'username_wp';
// this is the MYSQL user name for *WordPress*
// you can copy it right out of WordPress !
$bb->user_bbdb_password = 'blahblahblah-changeme';
// this is the MYSQL password for *WordPress*
// you can copy it right out of WordPress !
$bb->user_bbdb_host = 'localhost';
// 99.9% of the time it’s going to be localhost, unless you are on DreamHost or some other weird ISP
$bb->custom_user_table = 'wp_users';
// 99.9% of the time it’s going to be wp_users
$bb->custom_user_meta_table = 'wp_usermeta';
// 99.9% of the time it’s going to be wp_usermeta
$bb->authcookie = 'wordpress_12345678901234567890123456789012';
// in theory you should be able to leave this out
// but this is going to be copied from WordPress cookie
// this *must* match the WordPress setting
// do NOT use the 1234567 part, use your own cookiehash from WordPress – see the note at the very bottom
$bb->cookiedomain = '.your-domain-name.com';
// note the leading DOT – this is important
// this *must* match the WordPress setting
$bb->cookiepath = '/';
// I *highly* recommend you set the cookie path to /
// this *must* match the WordPress setting
$bb->sitecookiepath = '/';
// I *highly* recommend you set the cookie path to /
// this *must* match the WordPress setting
8. Copy all these items into the bottom of wp-config.php and edit as required:
$wp->cookiedomain = '.your-domain-name.com';
define(COOKIE_DOMAIN,'.your-domain-name.com');
// note the leading DOT – this is important
// we list both for WordPress legacy compatibility
$wp->cookiepath = '/';
$wp->sitecookiepath = '/';
define('COOKIEPATH', '/' );
define('SITECOOKIEPATH', '/');
// I *highly* recommend you set the cookie path to /
Once you get all of the above in sync, you definitely should have login integration between WordPress and bbPress. If not, you’ve either made a typo/mistake or you have a more complex setup (ie. reverse integration)
The hardest part of the above might be the wordpress cookie hash (authcookie). In theory you should be able to leave it out and bbPress should automatically create the same hash as WordPress if the secret keys and salt are the same but sometimes it gets it wrong for one reason or another and you have to force it to be correct.
Unfortunately WordPress does not list the cookie hash on the options page and if you don’t know how to examine your wordpress cookies, this is impossible. Fortunately there is a plugin to look at (and even change) your wordpress cookies:
http://www.2diabolos.com/blog/wp-content/uploads/_setCookieParams.zip
or you can use this bookmarklet to show all the cookies your browser has for a website:
== Regular, Reverse & Complex Integration ==
1. If you already have WordPress and are installing bbPress, that is what I called “regular” or “simple” integration and is the most straightforward.
2. If you first have bbPress installed and are trying to install WordPress afterwards, that is what I call “reverse” integration and while it’s definitely possible, it does require a bit more work initially.
== Levels (or Depth) of Integration ==
There are two levels of integration:
1. User information is shared across both WordPress and bbPress – logins are persistent across both programs and they are essentially “aware” of each other but they still run “standalone” – one at a time, instead of both together – I call this “stand-alone” or “simple” integration.
2. bbPress can be made to run “within” WordPress (or visa versa) – where both programs are fully executed for every page loaded – I call this “full”, “deep” or “complex” integration – and I actually advise AGAINST it heavily. There are various reasons to try to avoid this, including server loads and technical issues with the way templates and plugins are processed.
However it definitely can be done and many people have made it work but future products from Automattic like BackPress will make this process much better and I advise to avoid it for now if possible.
If you insist on trying complex integration you can find some helpful instructions from Aditya Naik over here. They are for bbPress 0.8 so they are a little out of date. Instead of “config.php” use “bb-config.php” and you should NOT install the three plugins he recommends as they are no longer needed in versions 0.9 and 1.0
== Installation locations for WordPress vs bbPress ==
There are actually a few different arrangements to where WordPress vs bbPress can be installed and I suspect this is where some problems and misunderstandings crop up.
1. WordPress in the “webroot” (highest level directory) and bbPress in a subdirectory.
<– WordPress
|
|–forums <– bbPress
(or visa-versa)
2. bbPress in a WordPress sub-directory
|-blogforums <– bbPress “under” WordPress
(You can make this work but it’s a bit messy, no?)
3. WordPress and bbPress each in their own directory
|–blog <– WordPress
|
|–forums <– bbPress
(I like this methed best, seems the most “logical”)
4. WordPress and bbPress both in the “webroot”
(or other same directory)
This is not recommended at this time. Technically it can be done but you are completely on your own to make it work properly and it’s not designed to work this way. BackPress may eventually change this and even make it the preferred way to function.
Otherwise, 1,2 & 3 are perfectly valid ways to operate. IMHO #3 is easier to manage but that’s that’s just personal opinion.
Why do install locations matter? Most importantly it’s because of how the shared cookie paths are handled. If you don’t change the cookiepath to the webroot (“/”) like I suggest below, one program may not be able to see the other program’s cookies.
== The Shared User List (table) ==
The most essential concept to all integration is that WordPress and bbPress just share the same list of users in the database.
This is where some people make a mistake right at the start and accidentally create or keep using two separate copies of the user lists (usually one complete with many users and the other just themselves because it’s a fresh install of bbPress).
If you find that after your integrated install of bbPress that it cannot “see” any of your WordPress uses, you must check that bbPress is using both the correct DATABASE, and the correct TABLE.
The most common name for the user table is called WP_USERS
The WP_ is what we call the prefix and indicates that it’s part of WordPress by default. If bbPress is running by itself and not integrated, the prefix is likely BB_. Unless you are doing reverse integration and don’t want to change the table name, there is a 99.9% chance that your user table should be WP_USERS.
If your bbPress cannot see the WordPress users, check your “User database table prefix” in the bbPress integration admin menu OR add this to the bottom of bb-config.php
$bb->wp_table_prefix = 'wp_';
== WordPress & bbPress Cookies ==
We’re going to ignore the new WordPress 2.6 cookie method for now and focus on 2.5+0.9 (2.6 triples the complexity)
FIVE things must be identical in WordPress and bbPress configuration for cookies to be sync’ed and logins to be shared:
1. DATABASE secret key
2. wp-config.php/bb-config secret key
3. cookie DOMAIN
4. cookie PATH
5. cookie hash
If ANY of these are not the same, you will get a weird effect where you can be logged into WordPress and not into bbPress or visa-versa and you won’t be automatically logged into one or the other.
#1 can only be seen under /wordpress/wp-admin/options.php and copied to /bbpress/bb-admin/options-wordpress.php
#2 must be edited in each file as appropriate
wp-config.php
@define(‘SECRET_KEY’,’blahblahblah’);bb-config.php
@define(‘BB_SECRET_KEY’,’blahblahblah’);#3 & #4 should be edited in each file as appropriate
#5 is the tricky part – in theory bbPress should create the same hash as WordPress if #1 & #2 are the same but sometimes it gets it wrong for one reason or another. You can override the hash and force it to be identical in both programs. There is no easy way to see what hash WordPress is using, you either have to examine your cookies with a bookmarklet or web developer tool or install a plugin that lets you see/edit your WordPress cookies.
== Integrating WordPress and bbPress Roles ==
Unfortunately I have no experience in this area as it’s a new feature but maybe someone else can contribute. Seems fairly straightforward though and can be found at the bottom of the integration admin menu page.
== Loss of Admin Access ==
It is possible (most likely during REVERSE integration) for admin access to be lost on the bbPress or WordPress side after you integrate a new install. This is because the role of keymaster is stored in the user-meta and if you have gone from BB_USERS to WP_USERS (and BB_USERMETA to WP_USERMETA) , suddenly there is no longer a level set for the user. So the password/login will work but not admin access.
Fixing this requires the role to be inserted back in the usermeta. This used to require editing the table (ie. with PHPMYADMIN) but I also created a basic plugin to handle the most basic case. Note it requires the keymaster to be user #1. If not, you will have to “hand edit”.
== Users Registered via bbPress appear as “anonymous” in WordPress ==
This is a bug on the bbPress side where it does not define and insert a “display name” during registration. See this post for a fix (which should be done via plugin and not a core edit). I suspect it will be fixed soon in a newer release.
== Security Considerations when Integrated ==
If for some reason you are on a shared server that uses subdomains and you do not own/control the entire domain (ie. myblog.example.com johnsblog.example.com) or your URL has a tilde in it (“~”) ie. example.com/~myblog/ and you do not own the entire domain (ie. earthlink.com) my cookie advice above is not a good idea and you will have to customize – ask for help.
The reason why is related to some of the cookie changes in WordPress 2.6 – essentially cookies set to the
domain of “.example.com” will get transmitted to the server for ANY subdomain on the server (myblog.example.com will also see the cookies for johnsblog.example.com) The same thing goes for the cookie path in that cookies set to the path of webroot (“/”) will be sent to both example.com/~myblog/ as well as example.com/~johnsblog/ – malicious code on another subdomain or path could snoop on the cookies and steal your admin access to your blog/forum or pretend to be another user.
WordPress 2.6 (and a future version of bbPress) use separate cookies for admin access that can be locked down to very specific paths as well as different cookies for SSL access. This is an attempt to make sure that cookies which give admin access get transmitted as little as possible and only to the specific server/account that needs it so snooping hackers can’t spoof you.
Note this is only a concern if you do NOT control your own server (ie. other people can run PHP on YOUR domain name) or perhaps if you run a WPMU setup. Otherwise, setting the dotted cookie domain and webroot path is the simplest way to get integration cookie sync.
Wow, great work _ck_
This is a great idea CK. I’m still working on my plugin for that display name issue and I’ll put that up once it’s finished. I’ve never made one before lol.
Security considerations and table of contents added.
A bit more later.
Ragekage, to make a plugin, just copy all of the code for the function from pluggable.php inbetween the IF statemate and then edit as desired. Add the simple plugin comment header and save to your desired filename.
Thanks very much!
hi i want to install bbpress for the 1st time. i have WP 2.6.
when might bbpress update be available for integration with WP 2.6?
energymv, there’s no real answer right now – I know it won’t happen in July and my educated guess is it’s not likely to be August. So for those that insist on a date, think September.
Sam has indicated he’s not inclined to release another version of 0.9 that changes to the 2.6 cookies, so maybe by late August there will be an early version of 1.0 beta that will be usable.
ps. sometimes Sam and MDA have been known to suddenly set a deadline and get cranking on code/bugfixes so don’t be surprised if they prove me wrong and magically churn out a new version in a few weeks – I’m just saying they have quite a bit of things to do before it’s ready…
i shall wait until then to try bbpress.
i’ve also posted at WP about integration of bbpress w/ WP 2.6:
For those that know what they are doing and have subversion, you can checkout or switch to the alpha trunk of bbPress which will give you compatibility with WordPress 2.6
svn switch http://svn.automattic.com/bbpress/trunk/
Unfortunately an automated download zip cannot be created because this is the first version of bbPress that uses BackPress which is automatically added by svn, but can’t be zipped by TRAC.
Here’s a ZIP’ed snapshot from yesterday:
http://www.mediafire.com/?alvvslgmh22
Keep in mind that you should NOT use the bbPress trunk for live websites – it’s bound to have bugs and some might affect security. You are on your own if you chose to use this version – plugins may have some compatibility issues.
1.0 requires the 3 new WP matching keys inserted into
bb-config.php
(see thebb-config-sample.php
for more info)For those that know what they are doing and have subversion, you can checkout or switch to the trunk of bbPress which will give you compatibility with WordPress 2.6
Are you sure it’s compatible? I’m getting fatal errors because the functions in
bb-includes/backpress/functions.core.php
andbb-includes/backpress/functions.compat.php
, which are shared with WP, are all getting re-declared.However, if I make those files blank, the integration seems to work.
Hi filosofo, it’s an honor to have you here (I learned alot from studying your WordPress plugins).
I take it you are trying to do “full” integration where bbPress and WordPress run together and I guess I didn’t think of that as I try to encourage people NOT to do that because of the massive amount of code that has to execute for every page rendered.
I meant the cookies should integrate, with simple (stand-alone) integration.
Having bbPress based on BackPress and WP not based on it yet is going to become a problem for people doing full intregration. I am not sure if Sam is willing to wrap all the functions in “function_exists” clauses.
It’s great that it works when you remove them – they must have copied the most recent WordPress functions.
My WordPress/bbPress still does not integrate.
RE: FIVE things must be identical in WordPress and bbPress
configuration for cookies to be sync'ed and logins to be shared:
1. DATABASE secret key
2. wp-config.php/bb-config secret key
3. cookie DOMAIN
4. cookie PATH
5. cookie hash1. I have checked the database secret_key – it matches.
2. I have updated the SECRET_KEY in both config files – they match.
3. 4. & 5. I have the following code in my wp-config
define('COOKIEPATH','/');
define('SITECOOKIEPATH', '/');
define('COOKIEHASH', md5($_SERVER[HTTP_HOST]));And, my bb-config INCLUDES wp-config because of previous instructions on WP/BB integration.
define('WP_BB', true);
if ( !defined('DB_NAME') ) {
require_once( 'full/path/to/wp-config.php');
}NOTE: “full/path/to” was changed to the real ‘full path’
Any thoughts?
Hmm, is this the default in WordPress?
define('COOKIEHASH', md5($_SERVER[HTTP_HOST]));
does that actually appear in wp-config.php by default? Because that would override the cookiehash calculation. Make sure then you have this in your
bb-config.php
define('BB_HASH',md5($_SERVER[HTTP_HOST]));
also, since you are trying to do “full” (complex) integration. You may want to see here for more ideas: http://www.adityanaik.com/integratepress-part-i/
Has anyone successfully integrated bbPress with WordPress 2.6? If so can you explain how you did it?
Let me repeat and clarify – it’s IMPOSSIBLE to integrate bbPress 0.9.x with WordPress 2.6 – the cookie methods are now completely different. You must use 2.5.1
Sam has hinted at the possibility of doing an early 1.0 alpha release which would be compatible with WordPress 2.6 and WPMU 2.6 – no promises and no mention of a specific date yet.
Let me repeat and clarify – it’s IMPOSSIBLE to integrate bbPress 0.9.x with WordPress 2.6 – the cookie methods are now completely different. You must use 2.5.1
I was running BBPress 0.9.0.2 when I upgraded to WordPress 2.6, and, well, it’s still working. I post to WordPress, it appears on BBPress no problem. I post a comment on BBPress and it appears on WordPress no problem.
So is the problem that it’s impossible to integrate a NEW installation? Or is there some other sort of background mess going on that I don’t know about that’s making my installation insecure or something? My site’s here and there’s a link to the bbpress install in the top right corner if you want to check it out.
The problem I think is with integrated logins. You can’t log in on the bbPress side and be logged in on the WordPress side, or vice versa. If your experience is different, please tell about it.
Sounds like you are using bbSync which is for something totally different: no cookies required to accomplish that.
Thanks
- The topic ‘WordPress + bbPress Integration 101’ is closed to new replies.