Вопрос:
Добрый день!
В категории «Х» есть записи. Я создал произвольный тип записи для них..
Вопрос: Как массово перенести записи с категории «Х» в произвольный тип записей?
Решение:
Логика:
- Получаем список постов в указанной категории
- циклом изменяем тип этих постов
Код:
<?php $my_posts = new WP_Query; $myposts = $my_posts->query( array( //Получаем записи 'post_type' => 'post', // Указываем исходный тип записи 'cat' => 4 // Указываем id категории из которой будем брать записи для преобразования. ) ); foreach( $myposts as $pst ){ //Цикл для изменения типа постов set_post_type( $pst->ID, 'page' ); // Указываем нужный тип поста вместо "page" } ?>
FAQ
Вопрос: где эту функцию нужно писать? оформить функцией в functions.php и откуда-то вызвать? или просто выполнить ее в одном из шаблонов?
Ответ: я бы посоветовал вышеуказанную функцию вставить в отдельный файл и запускать когда, когда это надо.
Файл поместить в корень сайта, в файл записать
<?php // подгружаем среду WP require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); // дальше любой код ?>
В коде есть $pst… Это не ошибка? возможно нужyо $post?
В данной ситуации $pst это просто переменная, она может быть любой. В коде была синтаксическая ошибка, я её исправил и проверил код на работоспособность.
Теперь точно всё работает
спасибо, оно работает. но в моем случае не хватает сразу нескольких вещей. я пытался таким образом перенести записи в товары woocommerce. сами товары появляются, но они почему-то скрытые и без категорий-тегов. последнее, может быть, можно как-то поправить забирая имя тега и категории в переменные (если, конечно, WC не держит их как-то отдельно, как это у него сделано с атрибутами товара) и затем, помимо типа поста, присваивать еще и их. а вот видимость записи, наверное реализована у WC как-то по-своему. очень жаль. хотелось изящно решить вопрос с переводом каталога в магазин.
То, что описали вы намного сложнее изначально поставленной задачи. Постараюсь через недельку заняться решением вашей задачи
UPD
Я нашел несколько плагинов, которые решают вашу задачу: