Переименование пользовательских типов сообщений и таксономий

31

Я начал разработку сайта с более чем дюжиной пользовательских типов постов. Я хотел бы переименовать некоторые из них, не только отображаемое значение, но и собственно имя настраиваемого типа записи. Однако меня беспокоит, что, просто запустив запрос на обновление SQL, я упущу некоторые места, где мне нужно что-то изменить или перезаписать часть сериализованных данных. Я уже ввел более 3000 наименований, поэтому я не могу просто перезапустить с чистой базой данных.

Как лучше всего переименовать пользовательский тип записи? Как насчет переименования таксономии?

Дерек Перкинс
источник
Следующий вопрос в том же духе касается пользовательских правил переписывания .htaccess. Будет ли много оставшихся правил засорять мою базу данных? Я еще не запустил сайт, поэтому мне не нужно перенаправлять старые ссылки.
Дерек Перкинс

Ответы:

47

SQL-запрос для переименования постов:

UPDATE  `wp_posts` SET  `post_type` =  '<new post type name>' WHERE  `post_type` = '<old post type name>';

SQL-запрос для переименования таксономии:

UPDATE  `wp_term_taxonomy` SET  `taxonomy` =  '<new taxonomy name>' WHERE  `taxonomy` = '<old taxonomy name>';

Это должно заботиться обо всех областях базы данных. Просто не забудьте сопоставить новые имена в коде, где зарегистрированы типы сообщений или таксономии. Насколько я знаю, это еще не обрабатывается ни в одном плагине.

Джон П Блох
источник
9
Отличный ответ, именно то, что мне было нужно. Вот подсказка на случай, если другие столкнутся с той же проблемой, что и я: после того, как я выполнил запрос и обновил свой код, все в основном работало, но когда я попытался перейти на страницу с отдельным элементом контента, я получил ошибку 404. Я думаю, что некоторый постоянный кэш должен быть сброшен; Я пошел в Инструменты> Постоянные ссылки и нажал Сохранить, затем подробные страницы начали работать.
Энди Гислер
Когда я это сделал, я также обновил поле guid. Это может помочь сделать ненужным восстановление постоянных ссылок, как упоминалось @AndyGiesler. Просто включите в ваш оператор UPDATE следующее: guid = REPLACE (guid, '<старое имя типа поста>', '<новое имя типа поста>')
rinogo
Просто чтобы добавить немного дополнительной информации к комментарию rinogo, это немного более безопасный способ обновления guid: UPDATE wp_posts SET guid = REPLACE (guid, 'post_type = <имя типа старого сообщения>', 'post_type = <имя нового типа сообщения > ');
Дэвид
просто отметим, что вам нужно будет следить за именами таблиц при работе на
мультисайтах
6

Привет, Дерек Перкинс:

В общем , ответ @John P Bloch точный, но с оговоркой . Плагины и даже пользовательские темы могут и могут хранить информацию о типах записей и, таким образом, чтобы быть уверенным, что вы не повредите свои данные, вам нужно убедиться, что ваши плагины и темы не хранят типы записей или если они это делают, вы обновляете их данные. также.

Можете ли вы рассказать нам, какие плагины вы используете?

MikeSchinkel
источник
Неплохо подмечено. Я создаю свою тему, поэтому мне определенно придется пройтись и изменить свой код. У меня нет никаких плагинов, которые хранят пользовательскую информацию о типе сообщения, однако.
Дерек Перкинс
Это хороший момент. Я использовал расширенные настраиваемые поля, и для каждой группы полей, прикрепленной к этому сообщению, необходимо вручную сбросить его на новое имя CPT. После этого все работает нормально, хотя.
Крис Рей
4

Если вы не хотите выполнять SQL-запросы самостоятельно, есть несколько плагинов, которые вы можете использовать:

Я успешно использовал Convert Post Types для массового изменения сообщений.

Для преобразования invididual сообщения , то сообщение Тип Switcher является лучшим вариантом.

Адам Демпси
источник
Спасибо за размещение этих ссылок. Я прекрасно выполняю SQL-запросы, но они определенно пригодятся другим, которые сталкиваются с этой публикацией.
Дерек Перкинс
это, кажется, конвертирует типы сообщений, а не переименовывает их
vladkras