WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

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

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

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

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) нужно перемещать. Перед этим обязательно сделайте бэкап базы данных! Мало ли что...

Для тех, кто в танке, но нужен такой прием
  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.

18 комментариев
Полезные 2 Все
    Войти