Пакетно переміщуємо записи (пости) з однієї таксономії до іншої (з рубрики в мітку)

Сьогодні знайомий запитав, як можна об’єднати статті з двох категорій в одну. На що я, розуміючи всю глибину питання, жартома відповів йому, – перенести кожну статтю в іншу категорію.

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

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'";

	if( ! $posts = $wpdb->get_results( $sql ) )
		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>Оновлений запис з ВД: $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 .

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *