Skip to:

Pseudo-Integration — Importing parts of WordPress into bbPress

  • Ryan


    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);
    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);
    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>';
    $output .= '</ul>';
    $fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/your-theme/ext/posts.html', 'w');
    fwrite($fp, $output);
    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.
Skip to toolbar