Пакетно перемещаем записи (посты) из одной таксономии в другую (из рубрики в метку)
Сегодня знакомый спросил, - как можно объединить статьи из двух категорий в одну. На что я, понимая всю глубину вопроса, шутя ему ответил, - перенести каждую статью в другую категорию.
Разумеется, речь шла о большом количестве статей и сделать это нужно было программно. Не долго думая, я написал вот такую функцию, которая перемещает все статьи из одной категории в другую (откуда и куда можно указать):
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 '<ol>';
foreach( $posts as $res ){
$wpdb->query( "
UPDATE $wpdb->term_relationships
SET term_taxonomy_id = '$change_to'
WHERE object_id = '$res->ID'
" );
echo "<li>Обновлена запись с ID: $res->ID ($res->post_title)</li>";
}
echo '</ol>';
}
Разместите этот код куда-нибудь, а затем вызовите функцию так:
<?php kama_change_cat( 1, 8 ); ?>
где вместо 1 и 8 необходимо указать ID категорий: откуда (1) и куда (8) нужно перемещать. Перед этим обязательно сделайте бэкап базы данных! Мало ли что...
Для тех, кто в танке, но нужен такой прием
-
Открываем файл шаблона
footer.phpтуда в самый низ подряд вставляем функцию и её вызов. Сохраняемfooter.php. Идем на сайт и обновляем любую страницу. После обновления в самом низу (в футере) будет видно, какие записи были перенесены. -
Опять открываем footer.php и удаляем все, что только что туда было добавлено (функцию и её вызов).
- Радуемся

Второй вариант
Чтобы изменить тип записи, скажем, сделать из записей постоянные страницы или запись произвольного типа, можно использовать специальную функцию 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.