J'ai créé un type de publication personnalisé appelé «portfolio» mais je veux le changer en «projets». Quelles seraient les étapes exactes à suivre pour changer le nom en toute sécurité et empêcher les messages de type de message personnalisé de disparaître dans le tableau de bord?
Remarque: il y a déjà des messages, portfolio
donc je ne peux pas simplement passer portfolio
avec projects
.
/* Register Portfolio Post Type */
add_action('init', 'create_portfolio');
function create_portfolio() {
$labels = array(
'name' => __('Portfolio', 'post type general name'),
'singular_name' => __('Project', 'post type singular name'),
'add_new' => __('Add New', 'portfolio item'),
'add_new_item' => __('Add New Project'),
'edit_item' => __('Edit Project'),
'new_item' => __('New Project'),
'view_item' => __('View Project'),
'search_items' => __('Search Projects'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','thumbnail')
);
register_post_type( 'portfolio' , $args );
}
/* Register Skills Taxonomy */
register_taxonomy("Skills", array("portfolio"), array("hierarchical" => true, "label" => "Skills", "singular_label" => "Skill", "rewrite" => true));
/* Add Fields */
add_action("admin_init", "add_portfolio_fields");
function add_portfolio_fields(){
add_meta_box("website_url", "Website URL", "website_url", "portfolio", "side", "low");
add_meta_box("view_more", "View More", "view_more", "portfolio", "side", "low");
add_meta_box("screenshot_name", "Screenshot Name", "screenshot_name", "portfolio", "side", "low");
add_meta_box("thumbnail_name", "Thumbnail Name", "thumbnail_name", "portfolio", "side", "low");
add_meta_box("thumbnail_alt", "Thumbnail Alt", "thumbnail_alt", "portfolio", "side", "low");
}
function website_url(){
global $post;
$custom = get_post_custom($post->ID);
$website_url = $custom["website_url"][0];
?>
<label>Website URL:</label>
<input size="50" name="website_url" value="<?php echo $website_url; ?>" />
<?php
}
function view_more() {
global $post;
$custom = get_post_custom($post->ID);
$view_more = $custom["view_more"][0];
?>
<label>View More:</label>
<input size="50" name="view_more" value="<?php echo $view_more; ?>" />
<?php
}
function screenshot_name() {
global $post;
$custom = get_post_custom($post->ID);
$screenshot_name = $custom["screenshot_name"][0];
?>
<label>Screenshot Name:</label>
<input name="screenshot_name" value="<?php echo $screenshot_name; ?>" />
<?php
}
function thumbnail_name() {
global $post;
$custom = get_post_custom($post->ID);
$thumbnail_name = $custom["thumbnail_name"][0];
?>
<label>Thumbnail Name:</label>
<input name="thumbnail_name" value="<?php echo $thumbnail_name; ?>" />
<?php
}
function thumbnail_alt() {
global $post;
$custom = get_post_custom($post->ID);
$thumbnail_alt = $custom["thumbnail_alt"][0];
?>
<label>Thumbnail Alt:</label>
<input name="thumbnail_alt" value="<?php echo $thumbnail_alt; ?>" />
<?php
}
add_action('save_post', 'save_portfolio_details');
function save_portfolio_details(){
global $post;
update_post_meta($post->ID, "website_url", $_POST["website_url"]);
update_post_meta($post->ID, "view_more", $_POST["view_more"]);
update_post_meta($post->ID, "screenshot_name", $_POST["screenshot_name"]);
update_post_meta($post->ID, "thumbnail_name", $_POST["thumbnail_name"]);
update_post_meta($post->ID, "thumbnail_alt", $_POST["thumbnail_alt"]);
}
/* Custom Columns */
add_action("manage_posts_custom_column", "portfolio_custom_columns");
add_filter("manage_edit-portfolio_columns", "portfolio_edit_columns");
function portfolio_edit_columns($columns){
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => "Project Title",
"description" => "Description",
);
return $columns;
}
function portfolio_custom_columns($column){
global $post;
switch ($column) {
case "description":
the_excerpt();
break;
}
}
Réponses:
Si vous n'avez encore aucun article dans votre portfolio.
Ce serait vraiment simple. Renommez tout avec "Portfolio" en "Projets". Vous ne perdrez rien et changerez le nom.
Éditer :
Essayez d'utiliser ce plugin http://wordpress.org/extend/plugins/ptypeconverter/ pour exporter les publications actuelles en toute sécurité et l'importer dans votre nouveau type de publication personnalisé.
Les étapes sont donc:
1 Téléchargez et utilisez le plugin: http://wordpress.org/extend/plugins/ptypeconverter/
2 Copiez votre fichier "portfolio" de type de publication personnalisé quelque part, enregistrez-le. appelez-le par exemple portfolio_post_typeBACKUP.php
3 Vous êtes maintenant sûr de l'échec de cette méthode. vous pouvez le récupérer.
4 Changer " portefeuille " en " projets "
5 Importez les articles avec le plugin et l'alto!
J'espère que cela fonctionne.
la source
portfolio
.Vous pouvez également le faire directement avec MySQL.
Deux choses à noter:
wp_postmeta
tableaux sérialisés, vous ne voulez pas faire une simple MISE À JOUR / REMPLACER car cela les ferait exploser! Eh bien, à moins que les chaînes de type nouveau et ancien ne soient exactement de la même longueur.la source
Etendre la réponse de Will un peu plus loin ..., et surtout si vous le faites depuis votre plugin:
La modification ici consiste à ne pas remplacer directement l'ancien type dans le GUID, mais à remplacer uniquement si "post_type = old_type" ou "/ old_type /" est présent. Cela évite de remplacer par erreur des slugs valides. (par exemple, votre type de publication personnalisé est portfolio, et le slug d'une page contient également un portfolio)
Une autre alternative consiste à faire quelque chose comme ceci:
HTH!
la source
Utilisez une requête de base de données WordPress mais n'oubliez pas les données d'options sérialisées
La méthode qui a fonctionné pour moi était de faire une recherche et de remplacer dans la base de données WordPress, mais en veillant à ne pas bousiller les données d'options sérialisées dans le processus. La meilleure façon que j'ai trouvée est d'utiliser l' utilitaire de recherche et de remplacement de base de données sécurisé à partir d'interconnect / it . Ne faites jamais simplement une requête de type
SET
post_type= REPLACE(
post_type,'old_post_type','new_post_type')
sans savoir ce que vous faites ou les données sérialisées se briseront car elles conservent une somme de contrôle et ne pourront pas se désérialiser correctement.Lisez la section Problèmes potentiels avant de suivre aveuglément cette
Étape 1 - Mettez à jour votre base de données en toute sécurité avec un nouveau nom
Étape 2 - Réinitialisez vos liens permanents
Si vous utilisez des permaliens, les mises à jour de votre base de données visseront vos redirections vers vos types de publication personnalisés. Il existe cependant une solution facile, il suffit d'aller dans les paramètres / permaliens de WordPress et de noter le paramètre actuel (le mien était 'nom du message'). Revenez ensuite à la valeur par défaut, cliquez sur «enregistrer», puis revenez au paramètre précédent, puis enregistrez à nouveau. Vous venez de corriger vos problèmes de redirection.
Étape 3 - Renommer les modèles de type de publication personnalisés de votre thème
Si vous êtes comme moi et que vous avez créé des modèles de type de publication personnalisés, vous devrez les renommer ou vos publications personnalisées auront l'air foirées. Accédez simplement à votre thème et recherchez tout fichier qui a votre ancien nom de type de publication dans son nom de fichier et renommez le fichier en utilisant votre nouveau nom de publication. Par exemple, j'ai dû changer
single-project-portfolio.php
poursingle-before-after.php
quand j'ai changé mon type de message deproject-portfolio
àbefore-after
.Étape 5 - Mettre à jour n'importe quel code
Effectuez une recherche de fichier et remplacez votre ancien nom de type de publication personnalisé dans le dossier thème et plugins. Pour moi, j'avais plusieurs shortcodes personnalisés qui dépendaient de la décision d'utiliser ou non l'un de mes types de publication personnalisés.
Tout tester
Problèmes potentiels (à lire avant de commencer cette procédure)
Problèmes de syndicationSi vos types de messages personnalisés ont été syndiqués, sachez que votre recherche initiale et votre remplacement modifieront également les guides de vos messages, ce qui forcera tous les abonnés à voir les anciens messages comme de nouveaux. Je n'ai pas eu à gérer cela, mais si vous en avez besoin, envisagez de choisir manuellement les tables que l'utilitaire de recherche sécurisée traite, puis mettez à jour manuellement toutes les données non sérialisées à l'aide de la requête suivante:
la source
WHERE 'post_type' LIKE '%old_post_type%'
, j'utiliseraisWHERE 'post_type' = 'old_post_type'
, car votre chemin pourrait également entraîner la modification d'autres post-types.Je n'ai pas la réputation de commenter donc je mettrai ceci ici. Prolonger l'exemple de Will. J'ai changé les LIKE en "=" et les ai tous deux pointés vers OERE
post_type
N'oubliez pas non plus d'aller dans Admin> Paramètres> Permaliens et cliquez sur "Enregistrer les modifications". Sinon, vos liens seront probablement rompus.
Vous devrez également modifier tous les noms de modèle de type "post-unique".
Cela devrait être tout ce que vous devez faire.
la source
Voici un moyen très simple:
la source