Пакетно переміщуємо записи (пости) з однієї таксономії до іншої (з рубрики в мітку)
Сьогодні знайомий запитав, як можна об’єднати статті з двох категорій в одну. На що я, розуміючи всю глибину питання, жартома відповів йому, – перенести кожну статтю в іншу категорію.
Зрозуміло, йшлося про велику кількість статей і зробити це потрібно було програмно. Не довго думаючи, я написав ось таку функцію, яка переміщає всі статті з однієї категорії до іншої (звідки і куди можна вказати):
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) потрібно переміщати. Перед цим обов’язково зробіть бекап бази даних! Мало що…
Для тих, хто в танку, але потрібний такий прийом
Відкриваємо файл шаблону
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 .