WordPress как на ладони
wordpress jino

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

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

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

<?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.

Пакетно перемещаем статьи (записи) из категории (метки) в другую категорию 16 комментариев
Полезные 1 Все
  • Артём @

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

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

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

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

    Ответить5.8 лет назад #
    • Kama4639

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

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

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

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

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

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

    Ответить4.3 года назад #
    • Denis

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

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

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

    Ответить2.8 года назад #
    • Kama4639

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

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

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

    Ответить2.1 года назад #
    • Kama4639

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

      Ответить2.1 года назад #
  • Galina cайт: kuxarocka.ru

    Здравствуйте!
    Когда создала сайт, нашла такую кулинарную тему, понравилась, установила, начала одновременно усваивать тему и опубликовать рецепты. Все шло хорошо, даже и не подозревала что там встроен код разработчика и т. д.
    Никогда не хотелось что-то менять, а рецепты в моей копилке было много, и я старалась их выставить на сайте. Но через некоторое время захотелось поменять дизайн, и тут столкнулась с такой проблемой.
    Изначально я начала публиковать мои рецепты в таксономии "Recipe" так как присутствует в теме. В таксономии "Записи" опубликовала за все время всего 7 записей. Остальная доля более 200 рецептов опубликовала в "Recipe". Когда захотела менять тему, все мои рецепты пропали (пришлось восстановить из резервной копии) только 7 записей осталось. То есть я должна была опубликовать мои рецепты в записях.
    Установила плагин, но он не видит рецепты. Пишет что записей на сайте (7), а рецептов (0). Может 2 вариант из статьи подойдет, но я затрудняюсь выполнять это. Может договоримся?
    Спасибо!

    Ответить1.7 года назад #

Здравствуйте, !

Ваш комментарий