Renommer les types de publication et les taxonomies personnalisés

31

J'ai commencé à développer un site avec plus d'une douzaine de types de messages personnalisés. J'aimerais renommer quelques-uns d'entre eux, pas seulement la valeur d'affichage, mais le nom du type de message personnalisé réel. Je crains cependant qu'en exécutant simplement une requête de mise à jour SQL, je rate certains endroits où je dois changer des choses ou écraser une partie des données sérialisées. J'ai déjà entré plus de 3 000 éléments, donc je ne peux pas simplement redémarrer avec une base de données propre.

Quelle serait la meilleure façon de renommer un type de publication personnalisé? Que diriez-vous de renommer une taxonomie?

Derek Perkins
la source
Une question de suivi dans le même esprit concerne les règles de réécriture .htaccess personnalisées. Y aura-t-il beaucoup de règles restantes obstruant ma base de données? Je n'ai pas encore lancé le site, je n'ai donc pas besoin de rediriger les anciens liens.
Derek Perkins

Réponses:

47

Requête SQL pour renommer les publications:

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

Requête SQL pour renommer la taxonomie:

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

Cela devrait prendre en charge tous les domaines de la base de données. N'oubliez pas de faire correspondre les nouveaux noms dans le code où les types de messages ou les taxonomies sont enregistrés. Pour autant que je sache, cela n'est pas encore géré dans les plugins.

John P Bloch
la source
9
Excellente réponse, exactement ce dont j'avais besoin. Voici une astuce au cas où d'autres rencontreraient le même problème que moi: après avoir exécuté la requête et mis à jour mon code, les choses fonctionnaient essentiellement, mais lorsque j'ai essayé d'accéder à la page pour un élément de contenu individuel, j'ai eu une erreur 404. Je pense que certains cache permalien devaient être réinitialisés; Je suis allé à Outils> Permaliens et j'ai cliqué sur Enregistrer, puis les pages détaillées ont commencé à fonctionner.
Andy Giesler
Lorsque j'ai fait cela, j'ai également mis à jour le champ guid. Cela pourrait aider à rendre inutile la régénération des permaliens comme l'a mentionné @AndyGiesler. Incluez simplement les éléments suivants dans votre instruction UPDATE: guid = REPLACE (guid, '<ancien nom du type de message>', '<nouveau nom du type de message>')
rinogo
Juste pour ajouter un peu plus d'informations au commentaire de rinogo, c'est un moyen un peu plus sûr de mettre à jour le guid: UPDATE wp_posts SET guid = REPLACE (guid, 'post_type = <old post type name>', 'post_type = <new post type name > ');
David
juste pour noter que vous devrez surveiller les noms de vos tables lors de l'exécution sur multisite
acSlater
6

Bonjour @Derek Perkins:

En général, la réponse de @John P Bloch est exacte mais avec une mise en garde . Les plugins et même les thèmes personnalisés peuvent et peuvent stocker des informations sur le type de publication et donc pour être sûr que vous ne corromprez pas vos données, vous devez vous assurer que vos plugins et thèmes ne stockent pas les types de publication ou s'ils le font, vous mettez à jour leurs données ainsi que.

Pouvez-vous nous dire quels plugins vous utilisez?

Mike Schinkel
la source
C'est un bon point. Je construis mon thème personnalisé, donc je vais certainement devoir passer par et changer mon code. Cependant, je n'ai aucun plugin qui stocke des informations de type de message personnalisé.
Derek Perkins
C'est un bon point. J'utilisais des champs personnalisés avancés, et pour chaque groupe de champs attaché à ce message, vous devez le réinitialiser manuellement au nouveau nom CPT. Après cela, cela fonctionne bien.
Chris Rae
4

Si vous ne voulez pas avoir à exécuter vous-même le manuel des requêtes SQL, vous pouvez utiliser quelques plugins:

J'ai utilisé avec succès Convertir les types de publication pour modifier en masse les publications.

Pour convertir des publications individuelles, le commutateur de type de publication est une meilleure option.

Adam Dempsey
la source
Merci d'avoir publié ces liens. Je suis bien en train d'exécuter les requêtes SQL moi-même, mais celles-ci seront certainement utiles pour d'autres qui rencontrent cette publication.
Derek Perkins
cela semble convertir les types de messages, pas les renommer
vladkras