Пакетно перемещаем записи (посты) из одной таксономии в другую (из рубрики в метку)
Сегодня знакомый спросил, - как можно объединить статьи из двух категорий в одну. На что я, понимая всю глубину вопроса, шутя ему ответил, - перенести каждую статью в другую категорию.
Разумеется, речь шла о большом количестве статей и сделать это нужно было программно. Не долго думая, я написал вот такую функцию, которая перемещает все статьи из одной категории в другую (откуда и куда можно указать):
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.