item_id = $item_id; // Get the metadata for this item if ( !$this->item_meta = get_post_meta( $this->item_id, 'anthologize_meta', true ) ) { $this->item_meta = array(); } $this->original_item_id = isset( $this->item_meta['original_post_id'] ) ? $this->item_meta['original_post_id'] : false; // Just in case the included_comments array doesn't exist if ( empty( $this->item_meta['included_comments'] ) || !is_array( $this->item_meta['included_comments'] ) ) { $this->item_meta['included_comments'] = array(); } $this->included_comments = $this->item_meta['included_comments']; } } /** * Import a single comment from the original post to the anth_library_item * * @package Anthologize * @since 0.6 * * @param int $comment_id The ID of the *original* comment that you want to copy over */ public function import_comment( $comment_id ) { // Get the comment from the original post if ( !$comment = get_comment( $comment_id, ARRAY_A ) ) return false; // We can pretty much reuse all the comment data, though we'll need to remove the ID // so that we create a new comment and set it to a different post unset( $comment['ID'] ); $comment['comment_post_ID'] = $this->item_id; // Insert the new comment if ( !$new_comment_id = wp_insert_comment( $comment ) ) return false; // Add the original comment id to the index of included comments. included_comments // is structured as [comment_copy_id] => original_comment_id if ( !in_array( $comment_id, $this->included_comments ) ) { $this->included_comments[$new_comment_id] = $comment_id; } } /** * Remove a single comment from the anth_library_item * * For technical reasons having to do with the markup created in the project organizer JS, * this function takes the *original comment ID* as a parameter, NOT the ID of the copied * comment on the anth_library_item. This function then deletes ALL instances of comments * on the anth_library_item that correspond to the original comment. * * @package Anthologize * @since 0.6 * * @uses apply_filters() Filter anthologize_remove_comment_status to change the default * behavior from trashing to true deletion * @param int $comment_id The ID of the *original* comment corresponding to the comments * you want to delete */ public function remove_comment( $comment_id ) { // Just to be safe, we remove all instances of comments on the library item that // correspond to the original comment in question $comments_to_remove = array_keys( $this->included_comments, $comment_id ); foreach( (array)$comments_to_remove as $ctr ) { // We'll trash the comment instead of deleting it wp_set_comment_status( $ctr, apply_filters( 'anthologize_remove_comment_status', 'trash' ) ); unset( $this->included_comments[$ctr] ); } } /** * Import all comments from the original post to the anth_library_item * * @package Anthologize * @since 0.6 */ public function import_all_comments() { $original_comments = get_comments( array( 'post_id' => $this->original_item_id ) ); foreach( $original_comments as $oc ) { // Don't overwrite existing comments if ( !in_array( $oc->comment_ID, $this->included_comments ) ) { $this->import_comment( $oc->comment_ID ); } } } /** * Remove all comments from the anth_library_item * * @package Anthologize * @since 0.6 */ public function remove_all_comments() { foreach( (array)$this->included_comments as $comment_id => $original_comment_id ) { $this->remove_comment( $original_comment_id ); } } /** * Utility function to reset the postmeta corresponding to the included comment data * * It's a good idea to run this function manually after running any of the other methods. * I don't do it automatically because it creates a lot of overhead for bulk add/deletes. * * @package Anthologize * @since 0.6 */ public function update_included_comments() { $this->item_meta['included_comments'] = $this->included_comments; update_post_meta( $this->item_id, 'anthologize_meta', $this->item_meta ); } } endif; ?>