|
|
|
вобщем есть категория с 500 сабкатегориями и соответсвенно постов
нужно запрос к мускулю чтобы указать главную категории и чтобы все посты из нее и сабкатегорий тоже грохнулись |
|
|
|
|
|
Структуру бы таблицы, так ничего не понятно...
А вообще
Код: |
DELETE FROM `table` WHERE `category` = 'number'
|
|
|
|
|
|
|
забыл добавить что вордпресс |
|
|
|
|
|
итак=\
SELECT term_id FROM `wp_terms` WHERE `name`='$name' - получаем ID интересующей нас категории, где $name - название категории
Получили `term_id`. Далее:
SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `wp_term_taxonomy`.`term_id`=`wp_terms`.`term_id`AND `taxonomy`='category' AND (`parent`=0 OR `parent`=`term_taxonomy_id`) - должны получить категорию и её подкатегории.
Далее:
SELECT `object_id` FROM `wp_term_relationships` WHERE `wp_term_taxonomy`.`term_taxonomy_id` - получаем все посты связанные со спарсенными выше категориями.
Далее:
DELETE FROM `wp_posts` WHERE `ID`=`wp_term_relationships`.`object_id` - вуаля
Я не очень силён во многовложенных запросах (вообще SQL запросах) и структуре БД вордпресса, но если я не ошибся, то вот этот волшебный запрос должен тебе помочь:
Код: |
DELETE FROM `wp_posts` (
SELECT `object_id` (
SELECT `term_taxonomy_id` (
SELECT term_id FROM `wp_terms` WHERE `name`='$name'
) FROM `wp_term_taxonomy` WHERE `wp_term_taxonomy`.`term_id`=`wp_terms`.`term_id` AND `taxonomy`='category' AND (`parent`=0 OR `parent`=`term_taxonomy_id`)
) FROM `wp_term_relationships` WHERE `wp_term_taxonomy`.`term_taxonomy_id`
) WHERE `ID`=`wp_term_relationships`.`object_id`
|
Только не забудь вместо $name написать название категории, которую нужно ёбнуть) |
|
|
|
|
|
DK,
1. Удаляем посты, находящиеся в категориях, где ID родителя 5
Код: |
DELETE FROM wp_posts WHERE ID IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `parent`='5'))
|
2. По аналогии удаляем пост меты
Код: |
DELETE FROM wp_postmeta WHERE post_id IN (SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `parent`='5'))
|
3. Удаляем связи категорий с постами
Код: |
DELETE FROM `wp_term_relationships` WHERE `term_taxonomy_id` IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `parent`='5')
|
4. Удаляем сами субкаты
Код: |
DELETE FROM `wp_terms` WHERE `term_id` IN (SELECT `term_taxonomy_id` FROM `wp_term_taxonomy` WHERE `parent`='5');
DELETE FROM `wp_term_taxonomy` WHERE `parent`='5';
|
|
|
|
|
|
|
Подводные камни:
1. не удалятся приатаченные к посту файлы (картинки, ...)
2. не удалятся субкатегории субкатегорий (и так далее по вложенности)
Чтобы избежать подводных камней - лучше написать скриптик на пхп, который будет обходить все субкаты и сначала последовательно удалять посты, а потом уже сами категории |
|
|
|
|
|
что-то типа
Код: |
$cat = 5; //id категории, которую нужно удалить
$categories = get_categories('orderby=id&order=desc&child_of='.$cat);
$cat_ids = array($cat);
foreach ($categories as $category) {
$cat_ids[] = $category->cat_ID;
}
$posts = get_posts('numberposts=-1&cat='.join(',', $cat_ids));
foreach ($posts as $post) {
wp_delete_post($post->ID, true);
}
foreach ($cat_ids as $id) {
wp_delete_term($id, 'category');
}
|
|
|
|
|
|
|
тааакс, спасибо большое!, значит я лучше все субкаты вручную ебану, и получится что все посты перекачуют в главную, а ты показал как их грохнуть, как сделаю отпишу |
|
|
|
|
|
Работает как часы
Все выполнил по пунктам - все сработало - респект!!! |
|
|
|
|
|