bbp_move_topic_handler( int $topic_id, int $old_forum_id, int $new_forum_id )
Handle the moving of a topic from one forum to another. This includes walking up the old and new branches and updating the counts.
Description
Parameters
- $topic_id
-
(Required) Topic id
- $old_forum_id
-
(Required) Old forum id
- $new_forum_id
-
(Required) New forum id
Source
File: bp-forums/topics/functions.php
function bbp_move_topic_handler( $topic_id, $old_forum_id, $new_forum_id ) { // Validate parameters $topic_id = bbp_get_topic_id( $topic_id ); $old_forum_id = bbp_get_forum_id( $old_forum_id ); $new_forum_id = bbp_get_forum_id( $new_forum_id ); // Update topic forum's ID bbp_update_topic_forum_id( $topic_id, $new_forum_id ); /** Stickies **************************************************************/ // Get forum stickies $old_stickies = bbp_get_stickies( $old_forum_id ); // Only proceed if stickies are found if ( !empty( $old_stickies ) ) { // Define local variables $updated_stickies = array(); // Loop through stickies of forum and add misses to the updated array foreach ( (array) $old_stickies as $sticky_topic_id ) { if ( $topic_id !== $sticky_topic_id ) { $updated_stickies[] = $sticky_topic_id; } } // If stickies are different, update or delete them if ( $updated_stickies !== $old_stickies ) { // No more stickies so delete the meta if ( empty( $updated_stickies ) ) { delete_post_meta( $old_forum_id, '_bbp_sticky_topics' ); // Still stickies so update the meta } else { update_post_meta( $old_forum_id, '_bbp_sticky_topics', $updated_stickies ); } // Topic was sticky, so restick in new forum bbp_stick_topic( $topic_id ); } } /** Topic Replies *********************************************************/ // Get the topics replies $replies = bbp_get_all_child_ids( $topic_id, bbp_get_reply_post_type() ); // Update the forum_id of all replies in the topic foreach ( $replies as $reply_id ) { bbp_update_reply_forum_id( $reply_id, $new_forum_id ); } /** Old forum_id **********************************************************/ // Get topic ancestors $old_forum_ancestors = array_values( array_unique( array_merge( array( $old_forum_id ), (array) get_post_ancestors( $old_forum_id ) ) ) ); // Loop through ancestors and update them if ( !empty( $old_forum_ancestors ) ) { foreach ( $old_forum_ancestors as $ancestor ) { if ( bbp_is_forum( $ancestor ) ) { bbp_update_forum( array( 'forum_id' => $ancestor, ) ); } } } /** New forum_id **********************************************************/ // Make sure we're not walking twice if ( !in_array( $new_forum_id, $old_forum_ancestors ) ) { // Get topic ancestors $new_forum_ancestors = array_values( array_unique( array_merge( array( $new_forum_id ), (array) get_post_ancestors( $new_forum_id ) ) ) ); // Make sure we're not walking twice $new_forum_ancestors = array_diff( $new_forum_ancestors, $old_forum_ancestors ); // Loop through ancestors and update them if ( !empty( $new_forum_ancestors ) ) { foreach ( $new_forum_ancestors as $ancestor ) { if ( bbp_is_forum( $ancestor ) ) { bbp_update_forum( array( 'forum_id' => $ancestor, ) ); } } } } }
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.