# ПАКЕТНОЕ ПЕРЕМЕЩЕНИЕ ЗАПИСЕЙ (ПУБЛИКАЦИЙ) ОТ ОДНОЙ ТАКСОНОМИИ К ДРУГОЙ (С КАТЕГОРИИ НА МЕТКУ)
Сегодня ко мне обратился друг с вопросом, как объединить статьи из двух категорий в одну. Поняв, что вопрос глубокий, я в шутку ответил: переместите каждую статью в другую категорию.
Конечно, речь шла о большом количестве статей, и это нужно было сделать программно. Не раздумывая долго, я написал функцию, которая перемещает все статьи из одной категории в другую. Вы можете указать, из какой категории и в какую вам нужно переместить записи.
## Функция для перемещения записей
Вот пример функции, которая выполняет эту задачу:
function kama_change_cat( $change_from, $change_to ){
global $wpdb;
$sql = "
SELECT p.ID, p.post_title FROM $wpdb->posts p
JOIN $wpdb->term_relationships rel ON ( p.ID = rel.object_id )
WHERE rel.term_taxonomy_id = '$change_from'
";
$posts = $wpdb->get_results( $sql );
if( ! $posts ){
return print 'ERROR: Пустой результат запроса.';
}
echo '';
foreach( $posts as $res ){
$wpdb->query( "
UPDATE $wpdb->term_relationships
SET term_taxonomy_id = '$change_to'
WHERE object_id = '$res->ID'
" );
echo "- Обновлена запись с ID: $res->ID ($res->post_title)
";
}
echo '
';
}
Разместите этот код в файле вашей темы, а затем вызовите функцию так:
Где вместо 1 и 8 нужно указать ID категорий: откуда (1) и куда (8) переместить записи. Не забудьте сделать резервную копию базы данных! Никогда не знаешь, что может случиться...
## ДЛЯ ТЕХ, КТО СЛИШКОМ СЛОЖНЫЙ
1. Откройте файл footer.php
, вставьте функцию и её вызов в самом низу. Сохраните файл footer.php
. Зайдите на сайт и обновите любую страницу. После обновления в самом низу (в подвале) вы увидите, какие записи были перемещены.
2. Снова откройте footer.php
и удалите все, что недавно добавляли (функцию и её вызов).
3. Наслаждайтесь :)

## АЛЬТЕРНАТИВНЫЙ ВАРИАНТ
Чтобы изменить тип записи, например, сделать посты постоянными страницами или записями особого типа, вы можете использовать специальную функцию set_post_type()
.
Чтобы переместить записи из одной таксономии в другую, можно использовать функцию wp_set_post_terms( $post_ID, $tags, $taxonomy, $append )
. При этом мы указываем:
- ID записи ($post_ID
);
- названия элементов таксономии, в которые мы их перемещаем ($tags
);
- название таксономии, в которую мы их перемещаем ($taxonomy
);
- способ перемещения: true
означает оставить в текущих элементах таксономии и добавить к указанным, false
означает удалить из текущих и добавить в указанные ($append
).
Например, давайте переместим записи с ID 5 и 10, которые находятся в таксономии "tax1", в таксономию "tax2" (в указанные элементы этой таксономии с ID 45 и 5):
$posts = array(5,10);
foreach( $posts as $post_id ){
if( wp_set_post_terms( $post_id, array(45, 5), "tax2", false ) ){
echo "Перемещено";
}
}
## ПЛАГИН
В комментариях предлагали использовать плагин Bulk Move для перемещения статей из одной категории в другую или для массового удаления.