Code to create topic when post is published. Working great, but one question.
-
I have searched and put code together and tested. Now whenever a new post is created in WordPress a new topic is created in a specific sub-forum on my bbPress. This is working great. It brings over the tags and everything.
The one problem I have is that the publish_post action fires every time a post is set to published. So if a post gets set back to draft or pending review, and then published again, another forum topic is created. There are problaby 2097324907629306 ways this can be solved. I am only coming up with some pretty stupid ones I think, so I was hoping someone might have a good idea here.
Here is the code for your functions.php:
function post_published_create_topic( $ID, $post ) { $author = $post->post_author; $name = get_the_author_meta( 'display_name', $author ); $title = $post->post_title; $permalink = get_permalink( $ID ); $excerpt = $post->post_excerpt; $subject = sprintf( '%s: %s', $name, $title ); $message = sprintf ('[b]%s[/b]' . "\n" . 'By %s' . "\n\n" . '[i]%s[/i]' . "\n\n" . 'View: %s' . "\n\n", $title, $name, $excerpt, $permalink ); $tags = wp_get_post_tags( $ID, array( 'fields' => 'names' ) ); $new_post = array( 'post_title' => $subject, 'post_content' => $message, 'post_parent' => 691, 'post_status' => 'publish', 'post_type' => 'topic' ); $topic_meta = array( 'forum_id' => $new_post['post_parent'] ); $topic_id = bbp_insert_topic($new_post, $topic_meta); $term_taxonomy_ids = wp_set_object_terms( $topic_id, $tags, 'topic-tag' ); } add_action( 'publish_post', 'post_published_create_topic', 10, 2 );
Take that code and put it in your themes functions.php (hopefully you are using a child theme.) The 691 is my sub-forums ID, replace that with the right ID for yours. The format of the post and its content is done on the line that starts “$message = sprintf”.
Now I just need to get it to stop creating a new post every time the same post is published. So far my ideas have been something like matching up the topics title with a string comparison, but that seems a bit heavy. There should be a simpler way and I am just not seeing it right now.
- You must be logged in to reply to this topic.