Pseudo-Integration — Importing parts of WordPress into bbPress
-
After wrestling with integration between WP 2.8 and bbPress 1.0.2 for the last day and a half, I gave up and started thinking of ways I could do this a little more straightforwardly.
My problem was I didn’t need any sort of database or user sharing between the sites. I simply wanted a way to display certain parts of my WordPress theme on my bbPress page. Things like a list of the WP categories, a menu being built from categories, a blogroll, etc.
Here’s what I did:
Instead of fully integrating WP, what is usually called “deep integration” so as to gain access to WordPress functions (wp_list_categories, etc.), I simply created a few functions in my WordPress theme’s function.php file that automatically generate the HTML for the items I wanted, and then saved it to a file that I could then call in my bbPress theme.
Part 1: WordPress Theme
Open up your functions.php file in your WordPress theme’s folder (/wp-content/themes/yourtheme/).
Scroll down to the bottom and create your new function. For this example, I’ll use adding a list of categories from your WP blog to your bbPress forum:
function make_cats () {
$output = NULL;
$output = wp_list_categories('echo=0&orderby=ID&hide_empty=0&title_li=<h3>categories</h3>');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/your-theme/ext/cats.html', 'w');
fwrite($fp, $output);
fclose($fp);
}
add_action('edit_category_form', 'make_cats');To explain this a bit, basically:
We create a variable called $output, NULL it (make sure it’s empty), and then load the category info into it. The wp_list_categories() function creates an unordered list of the categories with a heading (h3) saying “Categories”. We also use the echo=0 bit to make sure it don’t print the HTML it is generating to the screen, but rather just puts it in $output.
Then we open a file called cats.html in a new folder called ext that we’ve previously created (via FTP or whatever) in your theme directory (/wp-content/themes/your-theme). If the file doesn’t exists, the function will create it, however, the “ext” folder needs to already exist. The file is then fill it with $output. All these files and folders are completely up to you — you can save the file anywhere on your server, I just chose to stick it somewhere easy to remember and that wouldn’t clutter anything up.
The final step is:
add_action(‘edit_category_form’, ‘make_cats’);
This tells WordPress to run this function (make_cats) every time the edit_category_form action is triggered, basically any time you load your “Categories” page in the wp-admin area. There are lots of different actions for virtually anything you can think of. Find the one suitable for your customization here.
Part 2: bbPress Theme
The second part is to load the contents of your newly created HTML file in your bbPress theme. To do this only requires a single line of code inserted into the appropriate place in your theme. Wherever you want the list of categories (or whatever you’re wanting to display), simply add this line:
<?php include $_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/your-theme/ext/cats.html'; ?>
That should do it.
Here are a couple more function examples, both use the “save_post” action, so every time you save (new or edit) a post, it fires and updates (or creates) the HTML files:
Tag Cloud
function make_tags () {
$output = NULL;
$output = wp_tag_cloud('echo=0&smallest=8&largest=22&number=30&orderby=count&order=RAND');
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/your-theme/ext/tags.html', 'w');
fwrite($fp, $output);
fclose($fp);
}
add_action('save_post', 'make_tags');Recent Blog Posts
function make_posts () {
$output = NULL;
$getsomeposts = new WP_Query('numberposts=10');
$output = '<ul>';
while ($getsomeposts->have_posts()) : $getsomeposts->the_post();
$output .= '<li><a href="'. get_permalink() . '" title="' . the_title('','',FALSE) . '">' . the_title('','',FALSE) . '</a></li>';
endwhile;
$output .= '</ul>';
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/your-theme/ext/posts.html', 'w');
fwrite($fp, $output);
fclose($fp);
}
add_action('save_post', 'make_posts');Hope that helps someone who is as frustrated with the WP<–>bbP integration as I was. If you have any questions about this, feel free to post ’em here. I’ll do my best to check back.
- You must be logged in to reply to this topic.