Описание
Удаляет запись из Базы Данных (пост, вложение, страницу).
При удалении записи, также удаляются все данные связанные с ней, это произвольные поля, комментарии, связь с разделами (таксономией).
Функция возвращает false при неудачной попытке удаления или объект wpdb, при удачной процедуре удаления.
Использование
<?php wp_delete_post( $postid, $force_delete ); ?>
Параметры
- $postid (число)
- Идентификатор записи, поста.
По умолчанию: 0 - $force_delete (логический)
- Удалять мимо корзины, если она включена. Т.е. true - полное удаление.
По умолчанию: false
Примеры
1. Удалим пост по умолчанию "Hello World", ID которого равен 1:
<?php wp_delete_post(1); ?>
На заметку
- wp_delete_post() передает управление функции wp_trash_post(), если параметр $force_delete=false, тип записи равен post или page, запись еще не в корзине и функция trash не выключена.
- Использует: действие (action) delete_post до удаления записи, не распространяется на тип записи attachment.
- Использует: действие (action) deleted_post после того, как запись удалена, не распространяется на тип записи attachment.
- Использует: wp_delete_attachment(), если тип записи attachment.
wp_delete_post()
из файла: /wp-includes/post.php WP 3.3.2function 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;
}Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
