Renomeando tipos e taxonomias de postagem personalizada

31

Comecei a desenvolver um site com mais de uma dúzia de tipos de postagem personalizados. Gostaria de renomear alguns deles, não apenas o valor de exibição, mas o nome do tipo de postagem personalizado real. No entanto, estou preocupado que, ao executar uma consulta de atualização SQL, eu perca alguns lugares em que precise alterar as coisas ou substituir parte dos dados serializados. Já inseri mais de 3.000 itens, portanto, não posso simplesmente reiniciar com um banco de dados limpo.

Qual seria a melhor maneira de renomear um tipo de postagem personalizado? Que tal renomear uma taxonomia?

Derek Perkins
fonte
Uma pergunta de acompanhamento na mesma linha é sobre regras personalizadas de reescrita .htaccess. Haverá muitas regras restantes entupindo meu banco de dados? Ainda não iniciei o site, portanto, não preciso redirecionar nenhum dos links antigos.
Derek Perkins

Respostas:

47

Consulta SQL para renomear as postagens:

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

Consulta SQL para renomear taxonomia:

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

Isso deve cuidar de todas as áreas do banco de dados. Lembre-se de combinar os novos nomes no código em que os tipos de postagens ou taxonomias estão registrados. Até onde eu sei, isso ainda não foi tratado em nenhum plug-in.

John P Bloch
fonte
9
Excelente resposta, exatamente o que eu precisava. Aqui está uma dica, caso outras pessoas tenham o mesmo problema que eu: Depois de executar a consulta e atualizar meu código, as coisas estavam basicamente funcionando, mas quando tentei ir para a página para um item de conteúdo individual, recebi um erro 404. Eu acho que algum cache de permalink precisava ser redefinido; Fui a Ferramentas> Permalinks e cliquei em Salvar, e as páginas detalhadas começaram a funcionar.
Andy Giesler
Quando fiz isso, atualizei o campo guid também. Isso pode ajudar a tornar desnecessário a regeneração de links permanentes, como o @AndyGiesler mencionado. Basta incluir o seguinte em sua declaração UPDATE: guid = REPLACE (Guid, '<tipo velho pós name>', '<novo nome do tipo pós>')
rinogo
Apenas para adicionar um pouco mais de informação ao comentário do rinogo, esta é uma maneira um pouco mais segura de atualizar o guid: UPDATE wp_posts SET guid = REPLACE (guid, 'post_type = <nome do tipo de post antigo>', 'post_type = <novo nome do tipo de post > ');
David
Apenas a nota que você vai precisar para assistir seus nomes de tabela quando executado em vários locais
acSlater
6

Olá, @Derek Perkins:

Em geral, a resposta de John P Bloch é simples, mas com uma ressalva . Os plug-ins e até os temas personalizados podem e podem armazenar informações de tipo de postagem e, portanto, para garantir que você não corrompa seus dados, é necessário garantir que seus plugins e temas não armazenem tipos de postagem ou se eles atualizarem seus dados. também.

Você pode nos dizer quais plugins você está usando?

MikeSchinkel
fonte
Este é um bom ponto. Como estou criando meu tema personalizado, definitivamente terei que passar e alterar meu código. No entanto, não tenho nenhum plug-in que esteja armazenando informações personalizadas do tipo de postagem.
Derek Perkins
Este é um bom argumento. Eu estava usando campos personalizados avançados e, para cada grupo de campos anexado a essa postagem, você deve redefini-lo manualmente para o novo nome do CPT. Depois disso, ele funciona bem.
Chris Rae
4

Se você não deseja executar as consultas SQL manualmente, existem alguns plugins que você pode usar:

Usei com êxito Converter tipos de postagem para postagens de alteração em massa.

Para converter postagens invididuais, o Post Type Switcher é uma opção melhor.

Adam Dempsey
fonte
Obrigado por postar esses links. Estou bem executando as consultas SQL, mas elas definitivamente serão úteis para outras pessoas que se deparam com essa postagem.
Derek Perkins
este parece converter tipos de pós, não renomeá-los
vladkras