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

30 авг. 2010 г., 19:50:52
Просмотры: 26.5K
Голосов: 35

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

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

1
Комментарии

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

Derek Perkins Derek Perkins
1 сент. 2010 г. 08:43:40
Все ответы на вопрос 3
4
54

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

UPDATE  `wp_posts` SET  `post_type` =  '<новое имя типа записи>' WHERE  `post_type` = '<старое имя типа записи>';

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

UPDATE  `wp_term_taxonomy` SET  `taxonomy` =  '<новое имя таксономии>' WHERE  `taxonomy` = '<старое имя таксономии>';

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

30 авг. 2010 г. 20:24:58
Комментарии

Отличный ответ, именно то, что мне было нужно. Вот совет на случай, если у других возникнет та же проблема, что и у меня: после выполнения запроса и обновления кода всё вроде бы заработало, но при попытке перейти на страницу отдельного элемента контента я получал ошибку 404. Думаю, нужно было сбросить кеш постоянных ссылок; я зашёл в Инструменты > Постоянные ссылки и нажал Сохранить, после чего страницы с деталями начали работать.

Andy Giesler Andy Giesler
11 мар. 2011 г. 22:06:50

Когда я это делал, я также обновил поле guid. Это может помочь избежать необходимости пересоздавать постоянные ссылки, как упомянул @AndyGiesler. Просто добавьте следующее в ваш UPDATE запрос: guid=REPLACE(guid, '<old post type name>', '<new post type name>')

rinogo rinogo
1 мар. 2013 г. 22:44:14

Хочу добавить немного информации к комментарию rinogo, вот более безопасный способ обновления guid: UPDATE wp_posts SET guid = REPLACE (guid, 'post_type=<old post type name>', 'post_type=<new post type name>');

David David
13 февр. 2014 г. 07:49:41

обратите внимание, что при работе с мультисайтом нужно быть внимательным с именами таблиц

rmorse rmorse
21 мая 2014 г. 23:02:09
2

Привет, @Derek Perkins:

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

Не могли бы вы сказать, какие плагины вы используете?

30 авг. 2010 г. 21:50:41
Комментарии

Это хорошее замечание. Я создаю свою тему с нуля, так что мне определенно придется переработать свой код. Однако у меня нет плагинов, которые хранят информацию о пользовательских типах записей.

Derek Perkins Derek Perkins
1 сент. 2010 г. 08:23:27

Верное замечание. Я использовал Advanced Custom Fields, и для каждой группы полей, привязанной к этому посту, приходится вручную переназначать её на новый CPT. После этого всё работает как надо.

Chris Rae Chris Rae
11 дек. 2015 г. 22:51:10
2

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

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

Для преобразования отдельных записей лучше подойдет Post Type Switcher.

31 авг. 2010 г. 14:16:35
Комментарии

Спасибо за публикацию этих ссылок. Я могу сам запускать SQL-запросы, но они определенно пригодятся другим, кто наткнется на этот пост.

Derek Perkins Derek Perkins
1 сент. 2010 г. 08:24:39

кажется, это преобразует типы записей, а не переименовывает их

vladkras vladkras
15 авг. 2015 г. 15:49:09