• Нужно несколько тысяч постов за все года, кроме 2011, перенести в рубрику «архив», при этом удалив из прошлых рубрик. Как это можно сделать?

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • достаточно сложная задача, я бы написал небольшой скриптик с подключением к 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 — прав, ревизии желательно отключить

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Массово переместить посты в другую рубрику» закрыта для новых ответов.