bSuite 4

bSuite is a set of tools that help surface interesting and relevant posts, help your users navigate your content, and help authors develop and publish content. Take a look:

bSuite stats
cache-friendly stats
bSuite search word highlighting
search word highlighting
bSuite related posts
related posts
bSuite options
easy options



Hey! Here’s a cool thing: the list of pages and their contents up there is automatically generated using the shortcodes in this plugin.

License & Warranty

This software is provided as-is, with no warranty of any kind — use it at your own risk and don’t blame me if it makes your mother complain about your haircut — under the terms of the GNU Public License.

Language Translations


I’m certain there are bugs in here, please report what you find in the comments below.

122 thoughts on “bSuite 4

  1. Pingback: » bSuite 4 Public Beta

  2. When I updated my SVN copy and activated it, I tried importing my stats. It told me it was complete and didn’t update my stats. I backed everything up and reverted it, but I just wanted to know if that was a possible bug or am I just missing a step.

    Thanks. Really excited about the new version though!

  3. Pingback: » bSuite 4 beta 2

  4. Hey, Casey! I’m excited to see how this new version does, but I’m getting an error on activation:

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in (snip)/wp-content/plugins/bsuite/bsuite.php on line 470

    I’ve tried the zip file as well as the SVN version (which both say 40 beta 1, but that’s another topic).

    I’ll go try installing it on another blog and see how it goes.

  5. See Casey, The bSuite is really great thing!
    Thanx a lot.
    I use 4.0 beta2,
    – although the Plugins page shows it as beta1, plus
    – “Enhance WordPress search with full text keyword indexing” option makes a mess of Search results. Even after “Rebuild Indexes”. I’ve switched this off until successful release I guess.
    – “Insert related posts links at bottom of each post” – please do not enable it by default. I suppose this kinda useful thing, but it may not fit to any website design, as in my case 4example.

    and Stats is great!
    Thanx for a good tool.

  6. Pingback: » bSuite 4

  7. Pingback: Links e feeds de RSS: correções e ajustes | LULI RADFAHRER

  8. Pingback: » Do WordPress Pages Better With bSuite

  9. i can’t activate the plugin… i’m getting this error. Same as Steve.

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in … snip … /wordpress/wp-content/plugins/bsuite/bsuite.php on line 470

    what’s the solution to this?

    any help is much appreciated

  10. @nchenga: can you confirm that you’re running the 4.0.1 version? What PHP are you running? This doesn’t seem to be a problem in a number of other installations.

  11. Hi Casey, great plugin, I’m a big fan!

    I updated yesterday to bSuite4, but my reports now say that noone has visited my site all day! (Seems unlikely)
    Earlier this morning, I realized that I hadn’t upgraded my existing stats, so I went through the 7 step process. I felt better because my “Weekly Top Posts” widget was working again.

    However, my visitation stats don’t seem to be ticking. Is there a bit of code that I need to include in a template somewhere that has changed since the version previous to bSuite4?

  12. @Dennis Wurster: can you look at the wp_bsuite_hits_incoming table using a MySQL tool? Are there any entries in there?

    If you don’t have access to view the contents of the MySQL table, you could try going to your site’s dashboard > Settings > bSuite and click the “force stats migration” button. It only moves the number of rows each set in the cron settings section of that page each time you push the button, but it’ll get you started.

    The voodoo part: stats are written to the incoming table first, then processed into the reporting tables using WP’s built in cron. But it won’t do that if the load is above the threshold, and it doesn’t do it for the first few hours after install (in part to give you time to import the old stats without database contention).

  13. My mistake, that previous number was for ‘wp_bstat_hits’.

    In ‘wp_bsuite4_hits_incoming’, there are currently 7693 rows, with entries as recent as 2008-10-05 19:48:42. You’re right — the visits appear to be logging properly, but the reports aren’t aware of the new information.

  14. Thanks for the continued work on this plugin Casey. I have a box running PHP 4.4.7 and I am getting:

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /home/vhost/www/ on line 519

    when I try to activate the bsuite plugin. I am poking around in there to see what I can find, but am hoping that someone has found the cure already.


  15. @digi: Did you have any stats data collected prior to installing bSuite 4? The warnings are consistent with having no data and will disappear within a few hours if the stats collection is working properly.

  16. Hi Casey,

    Firstly thnks for your time and a great plugin. I tried installing the development version and got this error :

    Fatal error: Call to undefined function: plugins_url() in /home/theblack/public_html/wp-content/plugins/bsuite/bsuite.php on line 589

    Any idea how to resolve it?

    Thnks in advance.

  17. @gautam: You’ve got two separate problems:

    1: bSuite tries to get the server’s load average so that it can limit or delay certain activity when load is over a user configurable threshold. The plugin tries to call sys_getloadavg(), but if that’s not available (older versions of PHP don’t have it), it tries to get that info via a shell_exec() call. You’re getting a warning message because your host has set PHP to not allow it to get the information (and/or it’s an old version of PHP).

    2: You should remove the call to bstat_hitit() from your header. It hasn’t been needed since bSuite 3.

  18. I checked with my host. The server on which the site is hosted has Php 4 and I was informed that its been set to not give out the information.

    Frankly, I badly want “Incoming Search Terms for the Article – tagging” feature of this plugin.

    If you can strip off all other functions and help me with a plugin just to achieve “Incoming Search Terms for the Article – tagging” will be really great.

    Thanks a ton for your time. I really mean it.


  19. Hi Casey,

    Changed my host and everything is working fine at . I could get the related posts working fine but could not get “Top incoming search terms for this post” function to work:

    Top incoming search terms for this post

    Can you please guide me how to use this ?


  20. Pingback: » Creative Commons Licenses Not Compatible With GPL?

  21. Pingback:   Top incoming search terms for this post - incoming search term tagging by Gautam H N

  22. Pingback: wordpress stats | The Web Initiative

  23. Pingback: » New Plugins, New Feautures Plymouth State University Blogs

  24. This is not working properly in wordpress 2.7. You cannot save your options without getting an error. Is there a fix for this?

  25. My situation:
    I am using “../author/[username]” to display author bio and all posts by this author.The automatic redirect if a (search) result page has only 1 (!) entry made me go nuts… (“Has something changed with the latest update of WP… ?”)

    Problem: Instead of displaying the author page with only 1 post by this author it forwarded to this post.

    If my understanding is correct than you want to forward to a post in case the search result comes back with only one post. I add “&& is_search()” to your if statement and all is good now. PUH! 🙂

    Took me a coupe of hours to figure this one out….

    // redirects the search to the single page if the search returns only one item
    if( !$wp_query->is_singular && 1 === $wp_query->post_count && is_search())

  26. Any update on a fix for this?

    This is my favourite plugin and I’ve had to disable it because the ‘insert related posts’ option is messing up my template and I cannot turn it off. I also don’t want words highlighted when visitors come from search engines.

    As these two options are enabled by default, I cannot use the plugin 🙁

    Is there any way to disable these options via editing the plugin so that they are turned off by default when you activate bsuite?

  27. I also have this allert in option panel:
    Warning: array_reverse() [function.array-reverse]: The argument should be an array in ……/wordpress/wp-includes/wp-db.php on line 963
    What can i do?

  28. Hi Casey, still a big fan of bSuite!

    But, searches at are getting redirected to which fails to load a page. I’ve unticked the checkboxes for full text indexes and show-related-stories, but don’t notice a difference. Tweeted you a URL with the wp-options settings.

  29. Hi Casey,
    My stats table is getting pretty big after a couple of months. Am I able to delete some of the older stats data or what would you advise?
    Thanks and keep up the great work on this!!

    • @Marco: How big is big? Megabytes or gigabytes?

      With the exception of the wp_bsuite_hits_incoming table (which gets emptied as the stats are processed via wp cron), the data that’s stored is pretty well normalized, so there’s not much that can be removed without losing functionality. Though you could drop a lot of historical data from wp_bsuite_hits_sessions (which is probably one of your largest bsuite-related tables). There’s no current functionality that uses that data. The next place you can cut is the wp_bsuite_hits_shistory table, that’s the table that tracks the individual clicks in each session. There’s about 500MB and 10 million rows between the two of them on my blog.

      The other question to ask is what your motivation is. If the concern is disk space, then those are the tables to delete; but if the real concern is mysql load, I don’t think you’ll see much performance gain by removing them.

  30. Hi Casey!

    The extra ‘/go/’ in the problematic url is my doing; I have WP installed in a /go/ subdir. Anything I can do in the meantime?

    –Dennis (WildEep on Twitter)

    • @WildEep:
      The URL it’s rewriting is coming from get_option(‘siteurl’). If you change that value in your control panel, does WP still work? Does it fix bSuite?

  31. If I remove the ‘/go’ from the siteurl, the layout of the site breaks, as it doesn’t know how to find the subdir for the themes and such. In the meantime, I’ve commented out line 1670, to prevent the search triggering the re-write. I’m interested in knowing more about the enhanced searching and indexing that bSuite brings to the table though.

  32. Casey,
    my question was mostly load related, but I started to see the DB growing very fast and was wondering why….
    And how I might be able to shrink down the size of the DB without loosing needed data.

    Would it make sense to add the option for a separated DB for the stats?

    • @Marco:
      There’s no doubt that the bSuite stats architecture has scaling issues on high-traffic sites. At some point it would be good to allow stats collection on a separate host from the blog server, but I don’t know how to make a feature like that work easily for users. In the meantime, I’ve been addressing the scaling issues with caching, both object caching and whole-page caching. I use Memcached and Batcache on this site, and I’ve had good results from WP-Super-Cache elsewhere.

      Still, I’d like to know more about the traffic and load you’re seeing. I won’t turn down a chance to look for more optimization opportunities.

  33. Hi Casey, Thanks for your plugin. I had to adapt it, however, to make use of it on my site. I have a domtab feature in the side bar, which is run by a jQuery script (it displays various tabs with navigation items to query the database by archive, recent posts, external RSS blog feed, and now popular post). Hence, I had no need for the widget, and needed direct code to integrate it onto my site. I didn’t find any documentation for this on your site. This worked for the “popular post widget”:

    pop_posts( array(
    'count' => 10,
    'days' => 15,
    'return' => 'formatted',
    'show_icon' => 0,
    'show_title' => 1,
    'show_counts' => 0,
    'icon_size' => 's',
    )); ?>

    Can you provide me with the other attributes and arguments for “related,” “recently commented” and “bStat Refs.”

    • Related posts is a little more complex, but something like this should work:

      if( $related_posts = array_slice( $bsuite->bsuggestive_getposts( $id ), 0, 5 )) {
      echo'<ul class="relatedposts">';
      foreach ($related_posts as $post_id){
      echo'<li class="relatedposts"><a href="'. get_permalink($post_id) . '">' . get_the_title($post_id) . '</a></li>';
      echo '</ul>';

Leave a Reply

Your email address will not be published. Required fields are marked *