Hack: bb replies as wp comments; using bb API?
-
I get this error on my comments page
WordPress database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘
wp_bbpress_post_posts
WHEREpost_id
=]SELECT topic_id FROM
wp_bbpress_post_posts
WHEREpost_id
= 32 LIMIT 1;Nevermind i figured it out. You put < code > tags on this line:
$topic_id = $wpdb->get_var(“SELECT topic_id FROM <code.>$posts_table</.code> WHERE <.code>post_id</.code> = $felpostID LIMIT 1;”);
Now it works great, big thanks!
Oh, bizarre. It must have edited it in somehow. Trent, could you take that out in case someone else comes along? My hour’s up.
Excellent!
I just noticed this thread fel64! Brilliant! The code above should be edited correctly now!
Trent
Cheers!
Further hack here, to migrate any comments made to WP posts that have a corresponding bb topic (via the bbPress Post plugin again) as replies to the thread. Unfortunately the date/time won’t be right, it’ll be like a new post just made.
This needs to be installed/activated as a plugin to work, and to prevent it somehow accidentally happening again I suggest you immediately uninstall it. To run it, simply append “?lulz=p” to a URL and it’ll get to work – make sure you only do this once! An interface would be a lot neater, but, well, meh.
At your own risk.
<?php
/*
Plugin Name: Comments migrate
Plugin URI:
Description: moves wp comments into bb posts.
Author: fel64
Version: 0.7
Author URI: http://www.loinhead.net/
*/
function felmigrate()
{
global $bbdb, $bb_table_prefix;
//foreach blogpost/topic in wp_bbpress_post_posts
$bridge = $bbdb->get_results( ' SELECT post_id, topic_id
FROM wp_bbpress_post_posts', ARRAY_A );
foreach( $bridge as $sumthing => $link )
{
//foreach comment
$wppost = $link['post_id'];
$bbtopic = $link['topic_id'];
$felcoms = $bbdb->get_results( " SELECT comment_author, comment_date, comment_content, comment_author_IP
FROM wp_comments
WHERE comment_post_ID = $wppost" );
if( $felcoms )
{
foreach( $felcoms as $sumthing => $felcom )
{
//if valid user
$felu = bb_get_user_by_name( $felcom->comment_author );
if( $felu )
{
//create new post in that thread with said details
fel_new_post( $bbtopic, $felcom, $felu->ID );
}
}
}
}
//party
}
function fel_new_post( $topic_id, $post_details, $felID ) {
global $bbdb, $bb_cache, $bb_table_prefix, $thread_ids_cache;
$topic_id = (int) $topic_id;
$bb_post = $post_details->comment_content;
//$bb_post = apply_filters('pre_post', $bb_post, false, $topic_id);
$bb_post = htmlspecialchars( $bb_post, ENT_QUOTES );
$post_status = 0;
$now = bb_current_time('mysql');
//$now = $post_details->comment_date;
$uid = $felID;
$uname = $post_details->comment_author;
$ip = $post_details->comment_author_IP;
$topic = get_topic( $topic_id );
$forum_id = $topic->forum_id;
if ( $bb_post && $topic ) {
$topic_posts = ( 0 == $post_status ) ? $topic->topic_posts + 1 : $topic->topic_posts;
$bbdb->query("INSERT INTO $bbdb->posts
(forum_id, topic_id, poster_id, post_text, post_time, poster_ip, post_status, post_position)
VALUES
('$forum_id', '$topic_id', '$uid', '$bb_post','$now', '$ip', '$post_status', $topic_posts)");
$post_id = $bbdb->insert_id;
if ( 0 == $post_status ) {
$bbdb->query("UPDATE $bbdb->forums SET posts = posts + 1 WHERE forum_id = $topic->forum_id");
/* if( $now < $topic->topic_time )
{
$now = $topic->topic_time;
$uid = $topic->topic_last_poster;
$uname = $topic->topic_last_poster_name;
$post_id = $topic->topic_last_post_id;
}
*/ $bbdb->query("UPDATE $bbdb->topics SET topic_time = '$now', topic_last_poster = '$uid', topic_last_poster_name = '$uname',
topic_last_post_id = '$post_id', topic_posts = '$topic_posts' WHERE topic_id = '$topic_id'");
if ( isset($thread_ids_cache[$topic_id]) ) {
$thread_ids_cache[$topic_id]['post'][] = $post_id;
$thread_ids_cache[$topic_id]['poster'][] = $uid;
}
$post_ids = get_thread_post_ids( $topic_id );
if ( !in_array($uid, array_slice($post_ids['poster'], 0, -1)) )
bb_update_usermeta( $uid, $bb_table_prefix . 'topics_replied', $bb_current_user->data->topics_replied + 1 );
} else
bb_update_topicmeta( $topic->topic_id, 'deleted_posts', isset($topic->deleted_posts) ? $topic->deleted_posts + 1 : 1 );
if ( !bb_current_user_can('throttle') )
bb_update_usermeta( $uid, 'last_posted', time() );
$bb_cache->flush_one( 'topic', $topic_id );
$bb_cache->flush_many( 'thread', $topic_id );
$bb_cache->flush_many( 'forum', $forum_id );
do_action('bb_new_post', $post_id);
return $post_id;
} else {
return false;
}
}
//plunge
if( $_GET['lulz'] = 'p' )
felmigrate();
?>Erm… hey guys, could you tell me what I’ve done wrong?
I’ve just installed “bbPress Post”, and WordPress is telling me there’s no table called “wp_bbpress_post_options” (which is true). I reckon I should solve this problem before hacking wp’s comments.php template… but how?
ps.: Oh, and you guys are doing a great job here, congratulations
You do need to use that table, but if you installed WP yourself it should also be created when you activate the plugin. Maybe de-activate and re-activate.
However I’m working on a plugin that will do the entire thing (complete integration hopefully) based on a different, IMO much neater system. I don’t want to promise anything before it’s done, but if this plugin doesn’t work for you there’ll be a simpler alternative soon.
De-activated, re-activated and it can’t even feed the database. I’m hacking it now, but I can’t figure the problem out at all… oh well, I’m going to ask the author for help, and I’m sure looking forward to seeing your plugin, fel64
Fel, great work as usual. I just implemented your original hack (with a few minor mods of my own) on the team blog I just started last week. It is my first attempt at a bbpress-as-comments install, and it is working very well so far. This hack adds the extra comment visibility I was missing.
Keep up the good work.
Got a problem on my hands. I’m trying to simplify a lot of things by require’ing bb-load.php and then using the bb API. However bbdb loads with a fatal error if I do this when wordpress has fully loaded, but it works perfectly fine if I require bb-load when the plugin is run.
What I mean is
require( 'path/to/bb-load.php' )
works fine if placed anywhere inside the main code of the plugin. If I call it using the wp hookinit
it no longer works, nor does calling it by other hooks (that I’ve tried) or through function calls in templates and the like.I went through
wp-settings.php
and require’d bb-load systematically until I found that it only worked once wordpress had loadedgeneral-template.php
(line 153). It worked from any point onwards, including afterdo_action('init');
(which I don’t understand at all). Using theinit
hook in my plugin to require it does not work.I suspect this means that the
init
hook in wordpress maybe does something or other, then loads plugins, then does something else that stops bb being included, then runs any other funtions registered with the init hook – but my wp mojo is not impressive. I tested this with all other plugins deactivated.The output if bb-load is required too late in the code:
Fatal error: Call to a member function get_row() on a non-object in xampphtdocsforumsbb-includesfunctions.php on line 1224
That makes me think bbdb is not created, but I can’t see why it wouldn’t be.
Can someone help me with this please? I’d much rather use the API than duplicate functions.
Trent, do you think you could point this topic out to one of those people with mighty WP/bb mojo? Just a gentle pointing out or something. Nothing pushy.
The best bet would be to ask in the bbdevlist as both mdawaffe, matt and other ‘head dudes’ read the list on a regular basis, but visit these forums very seldom….! That is the best way to get some attention to this issue!
Trent
How does this crazy devlist thing work? Signed up but got no emails, so I assume no-one’s talking. I send an email to
bbdev@lists.bbpress.org
? I don’t want to completely break etiquette or somesuch first time, so I thought I’d wait and see but there isn’t that much to see.The list has been quiet for a while. The last message I have is Volume 30, Issue 1 from May 11, 2007. The one prior to that was Volume 29, Issue 17 dated April 23, 2007.
i tried it but might be some problem check where i use that one
- You must be logged in to reply to this topic.
@fel64
17 years, 8 months ago
Wanting to integrate bb and wp more, I hacked up wp’s
comments.php
template to get replies in the forum to show up below posts in the wp section of the site too.This currently requires the bbPress Post plugin.
Fairly simple job: find the corresponding topic, get the replies, and output them. My solution should work for you, too, if you have bbPress post installed and activated as a wp plugin. Code’s below.
I want to make it possible to reply to the topic from the wp section of the site if you’re logged in. Obviously I could make queries to insert the post into the database, but I’d like to use the bb API so it can be validated correctly, hooks are called etc. Not sure how I would go about making it accessible. Currently calling any bb functions returns the “undefined function” error; how can I make them available for use?
Paste this in front of the rest of your wp
comments.php
template:and paste this at the very back:
<?php } //end else conditional for corresponding topic to blogpost ?>
Example here