WordPress как на ладони
Черная пятница на хостинге fornex.com! Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

Пакетно перемещаем статьи (записи) из категории (метки) в другую категорию

Сегодня знакомый спросил, - как можно объединить статьи из двух категорий в одну. На что я, понимая всю глубину вопроса, шутя ему ответил, - перенести каждую статью в другую категорию.

Разумеется, речь шла о большом количестве статей и сделать это нужно было программно. Не долго думая, я написал вот такую функцию, которая перемещает все статьи из одной категории в другую (откуда и куда можно указать):

<?php
function kama_change_cat ($change, $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'";
	$results = $wpdb->get_results($sql);
	if (!$results) return print "Ошибка! Вернулся пустой запрос.";
	echo "<ul>";
	foreach($results as $res) { $i++;
		$wpdb->query( "UPDATE $wpdb->term_relationships rr SET rr.term_taxonomy_id = '$change_to' WHERE rr.object_id = '{$res->ID}'" );
		echo "<li>{$i}. Обновленна запись с ИД: {$res->ID} ({$res->post_title})</li>";
	}
	echo "</ul>";
}
 ?>

Разместите этот код куда-нибудь, а затем вызовите функцию так:

<?php kama_change_cat (1, 8); ?>

где вместо 1 и 8 необходимо указать ID категорий: откуда (1) и куда (8) нужно перемещать. Перед этим обязательно сделайте бэкап базы данных! Мало ли что...

Для тех, кто в танке, но нужен такой приемчик
  1. Открываем файл шаблона footer.php туда в самый низ подряд вставляем функцию и её вызов. Сохраняем footer.php. Идем на сайт и обновляем любую страницу. После обновления в самом низу (в футере) будет видно, какие записи были перенесены.

  2. Опять открываем footer.php и удаляем все, что только что туда было добавлено (функцию и её вызов).

  3. Радуемся smile

Второй вариант

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

15 комментов
Полезные 1 Вопросы 1 Все
  • @ Артём

    Привет, по скольку я не очень силён в MySQL, хотелось бы узнать как будет выглядит функция, если я перемещаю в другой каталог только определенные посты а не все посты из категории...

    <?php kama_change_cat (откуда, куда, id поста); ?>
    Ответить7 лет назад #
  • Михаил cайт: gomelcity.net

    Эта функция будет работать для версии 3.3.1?
    Еще момент, Функция перенесет запланированные записи или только опубликованные?

    А то блин с прогой одной накасячел laugh и теперь у меня 100500 одинаковых рубрик.

    Ответить6.8 лет назад #
    • Kama7021

      Точно не могу утверждать, но вроде, все должно работать и под 3.3.1

      Ответить6.8 лет назад #
  • Андрей

    А не подскажешь, допустим у меня есть 2 рубрики, как мне вывести на отдельной странице только то, что входит и в первую рубрику и во вторую?

    Заранее спасибо.

    Ответить6.5 лет назад #
  • Denis

    Все понял, все сделал, но получил ответ "Ошибка! Вернулся пустой запрос. "
    WP 3.5.1
    Блин, а функция очень крутая

    Ответить5.4 лет назад #
    • Denis

      Вот нашел такой очень простой и удобный плагин _http://wordpress.org/plugins/bulk-move/
      Кстати в рунете нет ответа на вопрос как перенести большое количество записей из одной рубрики в другую, решение нашел в wordpress.org через поиск)

      Ответить5.4 лет назад #
  • Серега cайт: dtp-profi.ru/page19.html

    Проблема еще и в поисковиках, изменится адрес страницы, а значит куча ошибок у поисковика, что не есть хорошо, придется посидеть деля редиректы, чтобы не потерять ссылки.

    Ответить3.8 года назад #
    • Kama7021

      Это только в том случае если в ЧПУ есть %category% я как раз по этой причине и по причине лишней нагрузки на сервер, никогда не использую структуру ЧПУ с %category%.

      Ответить3.8 года назад #
  • prostolinux cайт: prostolinux.ru

    Подскажите, я хочу перенести почти 100 статей из одной рубрики сайта на другой свой сайт. Перенести не проблема, как сделать редиректы со старых адресов на новые? Не вручную же все вписывать? bad

    Ответить3.1 года назад #
    • Kama7021

      Получите все старые УРЛы, выведите их в формате массива и используйте этот массив для редиректа на новые в новом сайте. Конкретно программирование плз не спрашивайте...

      Ответить3.1 года назад #
  • а как перенести записи если на сайте нарушены скрипты импорта а править их нет смысла так как ситуация не простая с сайом изза классного плагина - проект п яме а осталось только перенести посты со старого на новый (( хотелосб бы sql запросом каким или просто порезать базу но хз как так сделать чтоб норм

    Ответить25 дней назад #
Здравствуйте, !     Войти . Зарегистрироваться