Массово переместить посты в другую рубрику
-
Нужно несколько тысяч постов за все года, кроме 2011, перенести в рубрику «архив», при этом удалив из прошлых рубрик. Как это можно сделать?
-
достаточно сложная задача, я бы написал небольшой скриптик с подключением к WordPress API читаем тут
http://codex.wordpress.org/Integrating_WordPress_with_Your_Websiteдалее нуна получить все посты ранее 2011 года
ну тат что-то типа
$my_query = new WP_Query('year=2010');
теперь в $my_query будет массив за 2010 год
далее запускаем цикл и для каждого поста последовательно сначала разрываем все связи в категориях
wp_delete_object_term_relationships($_REQUEST['ID'], array('category'));
далее если надо разрываем все связи с метками
wp_delete_object_term_relationships($_REQUEST['ID'], array('post_tag'));потом обновляем пост
wp_update_post($post);
в масииве $post функции wp_update_post нужно будет изменить параметр post_category на id новой категории или массив категорий
$post[‘post_category’] = 324;
на нее есть подробная документация смотрите кодексСпасибо!
Всё-таки моих скромных знаний и умений программирования не хватило для решения. Делал так:
$my_query = new WP_Query('year=2010'); while ($my_query->have_posts()) : $my_query->the_post(); wp_delete_object_term_relationships($post->ID, array('category')); $post['post_category'] = 103; wp_update_post($post); endwhile;И смотрю
print_r($post);и там нет ни ‘category’, ни ‘post_category’.Попробуйте плагином http://wordpress.org/extend/plugins/bulk-move/
сначала переместить, потом убрать ненужную категорию
(только предварительно back up)В этом плагине, нет выбора даты поста. Поэтому не подходит.
В коде плагина есть query
$posts = $my_query->query(array('category__in'=>array($old_cat), 'post_type'=>'post', 'nopaging'=>'true'));можно добавить в запрос
'year'=>2010
работает, хоть и решение для ленивых.посмотрел насчет
wp_delete_object_term_relationships(), которой не пользуется плагин.
при использовании функцииwp_update_post()все старые связи записи сохраняются в копии-редакции записи (post revision), если сохранение редакций предварительно не отключено. Так что в базе останется еще несколько тысяч редакций, но удалить их дело несложное.И ещё имхо. Ввиду больших объемов, я бы эти манипуляции проводил на локальной копии сайта, а затем импортировал уже обновленную версию базы/таблиц.
И смотрю print_r($post); и там нет ни ‘category’, ни ‘post_category’.
их там и не должно быть, и скажу больше они вам даже не нужны!
вы сначала разрываете все связи со всеми категориями wp_delete_object_term_relationshipsну а id категории куда надо переместить все посты уж можно то посмотреть вот ее и указываете дополнительно в $post[‘post_category’] = 103;
кстати если этого не сделать то пост попадет в категорию ==Без рубрики==
так что можно сначала в настройках указать нужную вам рубрику по умолчанию и потом просто каждый пост сделать wp_update_post
vjpo — прав, ревизии желательно отключить
Тема «Массово переместить посты в другую рубрику» закрыта для новых ответов.