Definition:
function wp_delete_post( $postid = 0, $force_delete = false ) {}
Trashes or deletes a post or page.
When the post and page is permanently deleted, everything that is tied to it is deleted also. This includes comments, post meta fields, and terms associated with the post.
Parameters
- int $postid: Post ID.
- bool $force_delete: Whether to bypass trash and force deletion. Defaults to false.
Return values
returns:False on failure
Defined actions
- before_delete_post
do_action('before_delete_post', $postid);
- delete_comment
do_action( 'delete_comment', $comment_ids );
- deleted_comment
do_action( 'deleted_comment', $comment_ids );
- delete_postmeta
do_action( 'delete_postmeta', $post_meta_ids );
- deleted_postmeta
do_action( 'deleted_postmeta', $post_meta_ids );
- delete_post
do_action( 'delete_post', $postid );
- deleted_post
do_action( 'deleted_post', $postid );
- after_delete_post
do_action('after_delete_post', $postid);
Source code
function wp_delete_post( $postid = 0, $force_delete = false ) { global $wpdb, $wp_rewrite; if ( !$post = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = %d", $postid)) ) return $post; if ( !$force_delete && ( $post->post_type == 'post' || $post->post_type == 'page') && get_post_status( $postid ) != 'trash' && EMPTY_TRASH_DAYS ) return wp_trash_post($postid); if ( $post->post_type == 'attachment' ) return wp_delete_attachment( $postid, $force_delete ); do_action('before_delete_post', $postid); delete_post_meta($postid,'_wp_trash_meta_status'); delete_post_meta($postid,'_wp_trash_meta_time'); wp_delete_object_term_relationships($postid, get_object_taxonomies($post->post_type)); $parent_data = array( 'post_parent' => $post->post_parent ); $parent_where = array( 'post_parent' => $postid ); if ( 'page' == $post->post_type) { // if the page is defined in option page_on_front or post_for_posts, // adjust the corresponding options if ( get_option('page_on_front') == $postid ) { update_option('show_on_front', 'posts'); delete_option('page_on_front'); } if ( get_option('page_for_posts') == $postid ) { delete_option('page_for_posts'); } // Point children of this page to its parent, also clean the cache of affected children $children_query = $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE post_parent = %d AND post_type='page'", $postid); $children = $wpdb->get_results($children_query); $wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => 'page' ) ); } else { unstick_post($postid); } // Do raw query. wp_get_post_revisions() is filtered $revision_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'", $postid ) ); // Use wp_delete_post (via wp_delete_post_revision) again. Ensures any meta/misplaced data gets cleaned up. foreach ( $revision_ids as $revision_id ) wp_delete_post_revision( $revision_id ); // Point all attachments to this post up one level $wpdb->update( $wpdb->posts, $parent_data, $parent_where + array( 'post_type' => 'attachment' ) ); $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d", $postid )); if ( ! empty($comment_ids) ) { do_action( 'delete_comment', $comment_ids ); foreach ( $comment_ids as $comment_id ) wp_delete_comment( $comment_id, true ); do_action( 'deleted_comment', $comment_ids ); } $post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d ", $postid )); if ( !empty($post_meta_ids) ) { do_action( 'delete_postmeta', $post_meta_ids ); $in_post_meta_ids = "'" . implode("', '", $post_meta_ids) . "'"; $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_id IN($in_post_meta_ids)" ); do_action( 'deleted_postmeta', $post_meta_ids ); } do_action( 'delete_post', $postid ); $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->posts WHERE ID = %d", $postid )); do_action( 'deleted_post', $postid ); if ( 'page' == $post->post_type ) { clean_page_cache($postid); foreach ( (array) $children as $child ) clean_page_cache($child->ID); $wp_rewrite->flush_rules(false); } else { clean_post_cache($postid); } wp_clear_scheduled_hook('publish_future_post', array( $postid ) ); do_action('after_delete_post', $postid); return $post; }
3595
No comments yet... Be the first to leave a reply!