SQL запрос удаления постов до определенного id
Нужно удалить wp_post + wp_postmeta записи которые меньше определенного id,
что-то на подобие (написал в шутку, проверил, работает):
DELETE FROM wp_posts WHERE ID < 253294; DELETE FROM wp_postmeta WHERE meta_id < 256489;
если через вордпресс удаление
/*** Удаляем пост вместе с файлами */
add_action( 'before_delete_post', 'delete_all_attached_media' );
function delete_all_attached_media( $post_id ) {
if( get_post_type($post_id) == "post" ) {
$attachments = get_attached_media( '', $post_id );
foreach ($attachments as $attachment) {
wp_delete_attachment( $attachment->ID, 'true' );
}
}
}И зачем это? С удалением окуратно нужно, нужно конкретизировать что вы удаляете. Без контекста такой способ удаления оч странный...
А как быть с тем что вы удалите еще что то из базы что не надо было удалять?
Лучше хотя бы что бы было как то так:
(код не проверял, просто для примера)
DELETE FROM wp_posts WHERE ID IN (SELECT ID WHERE ID < 253294 AND post_type = 'post');
В postmeta хранятся ID постов. Поэтому задача сводится к тому чтобы собрать ID постов и удалить их через PHP, чтобы отработали все сопутствующие хуки.
global $wpdb; $args = (object) [ 'max_post_id' => 3294, 'post_type' => 'post', ]; $sql = " SELECT DISTINCT post_id FROM $wpdb->postmeta LEFT JOIN $wpdb->posts ON (ID = post_id) WHERE ID < %d AND post_type = %s "; $post_ids = $wpdb->get_col( $wpdb->prepare( $sql, $args->max_post_id, $args->post_type ) ); foreach( $post_ids as $post_id ){ $post = get_post( $post_id ); echo "$post->post_status - $post->post_title \n"; // wp_delete_post( $post_id, 'force' ); }