Comment modifier en toute sécurité le nom d'un type de publication personnalisé?
-
-
que diriez-vous de remplacer uniquement les étiquettes?how about replacing just the labels?
- 0
- 2013-04-24
- Bainternet
-
Juste les étiquettes?Jene saispasexactement ce que vous voulez dire,maisje préférerais le changer complètementtout au long.Just the labels? I'm not sure exactly what you mean but I would prefer to change it thoroughly throughout.
- 0
- 2013-04-24
- Desi
-
6 réponses
- votes
-
- 2013-04-24
Si vousn'avezpasencore d'articles dans votreportfolio.
Ce serait vraiment simple. Renommeztout avec "Portfolio"en "Projets". Vousne perdrez rienet changerez denom.
Modifier:
Essayez d'utiliser ceplugin http://wordpress.org/extend/plugins/ptypeconverter/pourexporter lespublications actuellesen toute sécuritéet lesimporter dans votrenouveautype depublicationpersonnalisé.
Les étapes sont donc:
1 Téléchargezet utilisez leplugin: http://wordpress.org/extend/plugins/ptypeconverter/
2 Copiez votrefichier "portfolio" detype d'articlepersonnalisé quelquepart,enregistrez-le. appelez-leparexempleportfolio_post_typeBACKUP.php
3 Vous êtes désormais sûr de l'échec de cetteméthode. vouspouvez le récupérer.
4 Remplacez "portefeuille "par "projets "
5 Importez les articles avec lepluginet l'alto!
J'espère que celafonctionne.
If you have no posts in your portfolio yet.
It would be really simple. Rename everything with "Portfolio" into "Projects". You will lose nothing and change the name.
Edit :
Try use this plugin http://wordpress.org/extend/plugins/ptypeconverter/ to export the current posts safely and import it into your new custom post type.
So the steps are :
1 Download and use the plugin : http://wordpress.org/extend/plugins/ptypeconverter/
2 Copy your custom post type "portfolio" file somewhere save. call it for example portfolio_post_typeBACKUP.php
3 Now you are sure when this method fails. you can recover it.
4 Change "portfolio" into "projects"
5 Import the posts with the plugin and viola!
Hope this works.
-
Ah,désolé aurait dû lementionner.Il y a déjàbeaucoup demessages dans `portfolio`.Ah, sorry should have mentioned. There are lots of posts in `portfolio` already.
- 0
- 2013-04-24
- Desi
-
J'ai édité la réponse.bonne chance!i edited the answer. goodluck!
- 0
- 2013-04-24
- Wesley Cheung
-
C'est unpluginfantastique!This is a fantastic plugin!
- 0
- 2014-01-07
- realph
-
cepluginne fonctionneplus correctement.Je l'aiessayéet celan'apas changétous les «anciens»types demessages.mais la solutionmysql (réponse de Will)fonctionnebien.this plugin is not working properly anymore. i tried it and it didn't change all 'old' post types. but the mysql solution (answer by Will) works fine.
- 2
- 2017-01-05
- honk31
-
Lepluginn'apas étémis àjour depuis deux ans.Plugin has not been updated in two years.
- 1
- 2017-01-17
- rhand
-
- 2014-01-13
Vouspouvez également lefaire directement avec MySQL.
UPDATE `wp_posts` SET # Update the post_type column `post_type` = REPLACE(`post_type`,'name_of_old_post_type','name_of_new_post_type'), # Update the urls `guid` = REPLACE(`guid`,'name_of_old_post_type','name_of_new_post_type') WHERE `post_type` = 'name_of_old_post_type'
Deux choses ànoter:
- Vous devrezmettre àjourtoutes les références à cetype depublication dans votre code (parexemple,lesmodèles,les définitions CMB2 ou les définitions detaxonomie).
- Si vous avez stocké des références à cetype depublication dans
wp_postmeta
dans destableaux sérialisés,vousne voulezpasfaire une simple UPDATE/REPLACE car cela lesferaexploser!Ehbien,àmoins que lesnouvelleset anciennes chaînes detype depublication aientexactement lamême longueur.
You can do this directly with MySQL as well.
UPDATE `wp_posts` SET # Update the post_type column `post_type` = REPLACE(`post_type`,'name_of_old_post_type','name_of_new_post_type'), # Update the urls `guid` = REPLACE(`guid`,'name_of_old_post_type','name_of_new_post_type') WHERE `post_type` = 'name_of_old_post_type'
Two things to note:
- You'll need to update any references to this post type in your code (say, templates, CMB2 definitions or taxonomy definitions).
- If you have stored any references to this post type within
wp_postmeta
within serialized arrays, you don't want to do a simple UPDATE/REPLACE because it'll blow them up! Well, unless both the new and old post type strings are the exact same length.
-
- 2014-07-17
Pour étendre unpeuplus la réponse de Will ...,et surtout si vous lefaites depuis votreplugin:
global $wpdb; $old_post_types = array('old_type' => 'new_type'); foreach ($old_post_types as $old_type=>$type) { $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET post_type = REPLACE(post_type, %s, %s) WHERE post_type LIKE %s", $old_type, $type, $old_type ) ); $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) WHERE guid LIKE %s", "post_type={$old_type}", "post_type={$type}", "%post_type={$old_type}%" ) ); $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) WHERE guid LIKE %s", "/{$old_type}/", "/{$type}/", "%/{$old_type}/%" ) ); }
Le changementiciest dene pas remplacer directement l'ancientype dans le GUID,mais dene le remplacer que si "post_type=old_type" ou "/old_type/"estprésent. Cela évite de remplacer les slugs validesparerreur. (parexemple,votretype depublicationpersonnaliséestportfolio,et le slug d'unepage contient également unportfolio)
Une autre alternativeest defaire quelque chose comme ceci:
global $wpdb, $wp_rewrite; foreach ($old_post_types as $old_type=>$type) { $q = 'numberposts=-1&post_status=any&post_type='.$old_type; $items = get_posts($q); foreach ($items as $item) { $update['ID'] = $item->ID; $update['post_type'] = $type; wp_update_post( $update ); } } $wp_rewrite->flush_rules();
Extending Will's answer a bit further..., and especially if you are doing it from your plugin:
global $wpdb; $old_post_types = array('old_type' => 'new_type'); foreach ($old_post_types as $old_type=>$type) { $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET post_type = REPLACE(post_type, %s, %s) WHERE post_type LIKE %s", $old_type, $type, $old_type ) ); $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) WHERE guid LIKE %s", "post_type={$old_type}", "post_type={$type}", "%post_type={$old_type}%" ) ); $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->posts} SET guid = REPLACE(guid, %s, %s) WHERE guid LIKE %s", "/{$old_type}/", "/{$type}/", "%/{$old_type}/%" ) ); }
The change here is to not replace old type in the guid directly, but replace only if "post_type=old_type" or "/old_type/" is present. This avoids replacing valid slugs by mistake. (e.g. your custom post type is portfolio, and a page's slug too has portfolio in it)
Another alternative is to do something like this:
global $wpdb, $wp_rewrite; foreach ($old_post_types as $old_type=>$type) { $q = 'numberposts=-1&post_status=any&post_type='.$old_type; $items = get_posts($q); foreach ($items as $item) { $update['ID'] = $item->ID; $update['post_type'] = $type; wp_update_post( $update ); } } $wp_rewrite->flush_rules();
-
Merci.Celamarche.Unepetite chose: la dernièrepartie de la deuxième requête dans laboucle devrait être "%post_type={$ old_type}%",pas "%post_type={$type}%".Thanks. This works. One minor thing: the last part of the second query in the loop should be "%post_type={$old_type}%", not "%post_type={$type}%".
- 1
- 2019-12-21
- Betty
-
- 2015-04-17
Utilisez une requête debase de données WordPress,maisn'oubliezpas les données d'options sérialisées
Laméthode qui afonctionnépourmoi était defaire une rechercheet de remplacer dans labase de données WordPress,maisen veillant àne pasbousiller les données d'options sérialisées dans leprocessus. Lemeilleurmoyen quej'aitrouvéest d'utiliser la base de données de rechercheet de remplacement sécurisée utilitaire d'interconnexion/it . Nefaitesjamais simplement une requête detype
SET
post_type= REPLACE(
post_type,'old_post_type','new_post_type')
sans savoir ce que vousfaites ou sérialisée les données serontinterrompues carelles conservent une somme de contrôleet nepourrontpas se désérialiser correctement.Lisez la section sur lesproblèmespotentiels avant de suivre aveuglément ceci
Étape 1 - Mettez àjouren toute sécurité votrebase de données avec unnouveaunom
- sauvegardez votrebase de données car lesmodifications suivantes ont unpotentieltrès réel de la corrompre.
- téléchargezet décompressez l'utilitaire de recherche sécuriséeet remplacement debase de données depuis l'interconnexion ça
- ajoutez le répertoireextrait à votre racine Web (celafonctionne également dans les sous-répertoires)
- accédez au répertoire,parexemple:/mywebsite.com/path/to/utility/directory/
- suivez lesinstructions. cliquez sur 'dry-run' si vous êtesparonoïdepour voir les changements (il yen aura des centaines si vous avezmême quelques articles dutype demessagemodifié)
- cliquez sur "exécutionen direct"pourfinaliser lesmodifications.
- supprimer le répertoire de recherche sécurisé de votre répertoire wordpress car c'est unproblème de sécurité
Étape 2 - Réinitialisez vospermaliens
Si vous utilisez despermaliens,lesmises àjour de votrebase de donnéesbousilleront vos redirections vers vostypes depublicationspersonnalisés. Ilexiste cependant une solution simple,il suffit d'aller dans lesparamètres WordPress/permalienset denoter leparamètre actuel (lemien était le ``nom de l'article ''). Revenezensuite à la valeurpar défaut,cliquez sur «Enregistrer»,puis revenez auparamètreprécédent,puisenregistrez ànouveau. Vous venez de résoudre vosproblèmes de redirection.
Étape 3 - Renommez lesmodèles detype depublicationpersonnalisés de votrethème
Si vous êtes commemoiet que vous avez créé desmodèles detype depublicationpersonnalisés,vous devrez les renommer ou vosmessagespersonnalisés semblerontfous. Allez simplement dans votrethèmeet trouvezn'importe quelfichier qui a votre anciennom detype d'article dans sonnom defichieret renommez lefichieren utilisant votrenouveaunom d'article. Parexemple,j'ai dû changer
single-project-portfolio.php
ensingle-before-after.php
lorsquej'ai changémontype depublication deproject-portfolio
àbefore-after
.Étape 5 - Mettre àjourn'importe quel code
Effectuez une recherche defichieret remplacez votre anciennom detype depublicationpersonnalisé dans le dossierthèmeet plugins. Pourmoi,j'avaisplusieurs codes courtspersonnalisés qui reposaient sur la décision d'utiliser l'un demestypes depublicationpersonnalisés.
Touttester
Problèmespotentiels (à lire avant de démarrer cetteprocédure)
Problèmes de syndicationSi vostypes demessagespersonnalisés ont été syndiqués,sachez que votre rechercheinitialeet votre remplacementmodifieront également lesguides de vosmessages,ce qui obligeratous les abonnés à voir les anciensmessages comme denouveaux. Jen'aipaseu àgérer cela,mais si vousen avezbesoin,envisagez de choisirmanuellement lestablestraitéespar l'utilitaire safesearch,puis demettre àjourmanuellementtoutes les donnéesnon sérialisées à l'aide de la requête suivante:
SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type') WHERE `post_type` LIKE '%old_post_type%';
Use a WordPress Database Query but Don't Forget About Serialized Option Data
The method that worked for me was to do a search and replace within the WordPress database, but making sure to not screw up serialized option data in the process. The best way I've found is to use the safe search and replace database utility from interconnect/it. Never just do a
SET
post_type= REPLACE(
post_type,'old_post_type','new_post_type')
type query without knowing what you are doing or serialized data will break since it keeps a checksum and won't be able to unserialize properly.Read the Potential Issues section before blindly following this
Step 1 - Safely Update Your Database with New Name
- backup your database because the following changes have a very real potential to corrupt it.
- download and unzip the safe search and replace database utility from interconnect/it
- add the extracted directory to your webroot (it also works in subdirectories)
- browse to the directory, e.g: /mywebsite.com/path/to/utility/directory/
- follow directions. click 'dry-run' if you are paronoid to see the changes (there will be hundreds if you even have a few posts of the changed post type)
- click 'live run' to finalize the changes.
- remove the safe search directory from your wordpress directory since its a security issue
Step 2 - Reset Your Permalinks
If you are using permalinks, the updates to your database will screw up your redirects to your custom post types. There is an easy fix though, just go into WordPress settings/permalinks and note the current setting (mine was 'post name'). Then switch back to default, click 'save' , then back to the previous setting, then save again. You've just fixed your redirect issues.
Step 3 - Rename Your Theme's Custom Post Type Templates
If you're like me, and you created custom post type templates, you'll need to rename these or your custom posts will look screwed up. Just go into your theme and find any file that has your old post type name in its file name and rename the file using your new post name. For example, I had to change
single-project-portfolio.php
tosingle-before-after.php
when I changed my post type fromproject-portfolio
tobefore-after
.Step 5 - Update Any Code
Do a file search and replace for your old custom post type name in the the theme and plugins folder. For me, I had several custom shortcodes that relied on making a decision on whether I was using one of my custom post types.
Test Everything
Potential Issues (read before starting this procedure)
Syndication IssuesIf your custom post types were syndicated, realize that your initial search and replace will also change the guids of your posts, which will force all subscribers to see the old posts as new ones. I didn't have to deal with this, but if you need to, then consider manually choosing the tables that the safesearch utility processes, then manually updating any non-serialized data using the following query:
SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type') WHERE `post_type` LIKE '%old_post_type%';
-
très chouettepour listertout cela.sauf que la requête SQL à lafin n'estpas complète,car vous avez oublié leguid,maisils sont répertoriés dans la réponse Wills.plusje n'iraispas avec `WHERE 'post_type' LIKE '% old_post_type%'`,j'utiliserais `WHERE 'post_type'='old_post_type'`,car votre cheminpourrait égalementfaire changer d'autrestypes depost.very neat to list all this up. except the sql query in the end is not complete, since you forgot about the guid, but they are listed in Wills answer. plus i wouldn't go with `WHERE 'post_type' LIKE '%old_post_type%'`, i would use `WHERE 'post_type' = 'old_post_type'`, since your way could also cause some other post-types, to change..
- 0
- 2017-01-05
- honk31
-
- 2015-11-09
Voici unmoyentrès simple:
- Exécutez l'Exportateur Wordpress (Outils> Exporter) -exportez uniquement letype depublication dont vous souhaitezmodifier lenom
- Ouvrez lefichier .xmlgénéréet remplaceztoutes lesmentions de l'anciennom dutype demessagepar lenouveaunom (dans laméta "custom_post_type" ainsi que dans le champpermalien)
- Créez votrenouveautype demessage avec lemêmenom que dans le .xmlmodifié (maisgardeztoujours l'ancienen cas d'échec)
- Importez lefichier .xml édité via l'importateur Wordpress (plugin disponible directement depuis Outils> Importer)
- Vérifiez que le contenuestprésent dans lenouveautype depublication,puis supprimez l'ancien
Here's a really simple way :
- Run the Wordpress Exporter (Tools > Export) - only export the post type you want to change the name of
- Open the generated .xml file and replace all mentions of the old post type name by the new name (in the "custom_post_type" meta as well as in the permalink field)
- Create your new post type with the same name as in the edited .xml (but still keep the old one in case it fails)
- Import the edited .xml file through the Wordpress Importer (plugin available directly from Tools > Import)
- Check that the content is present in the new post type and then remove the old one
-
Idéetrèsintelligente.Recommandépour quelqu'un quine veutpastoucher DBVery smart idea. Recommended for someone who dont wanna touch DB
- 0
- 2020-04-23
- kanlukasz
-
- 2014-10-22
Jen'aipas la réputation de commenter,je vais doncmettre ceciici.Prolonger l'exemple de Will.J'ai changé les LIKEen "="et les aitous les deuxpointés vers WHERE
post_type
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`,'old_post_type','new_post_type') WHERE `post_type` = 'old_post_type' UPDATE `wp_posts` SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type') WHERE `post_type` = 'old_post_type'
N'oubliezpas également d'aller dans Admin> Paramètres> Permalienset cliquez sur "Enregistrer lesmodifications".Sinon,vos liens serontprobablement rompus.
Vous devrez égalementmodifiertous lesnoms demodèle detype "publication unique".
Cela devrait êtretout ce que vous avez àfaire.
I don't have the reputation to comment so I will put this here. Extending Will's example. I changed the LIKEs to "=" and have them both point to WHERE
post_type
UPDATE `wp_posts` SET `guid` = REPLACE(`guid`,'old_post_type','new_post_type') WHERE `post_type` = 'old_post_type' UPDATE `wp_posts` SET `post_type` = REPLACE(`post_type`,'old_post_type','new_post_type') WHERE `post_type` = 'old_post_type'
Also remember to go into the Admin > Settings > Permalinks and hit "Save Changes". Otherwise your links will likely be broken.
You will also need to edit any 'single-post-type' template names.
This should be all you need to do.
J'ai créé untype depublicationpersonnalisé appelé «portfolio»maisje souhaite le changeren «projets». Quelles seraient les étapesexactes à suivrepourmodifier lenomen toute sécuritéet empêcher lespublications detype depublicationpersonnalisées de disparaître dans letableau debord?
Remarque:il y a déjà des articles dans
portfolio
,doncje nepeuxpas simplement changerportfolio
avec desprojects
.