Ich habe einen benutzerdefinierten Beitragstyp mit dem Namen "Portfolio" erstellt, möchte ihn jedoch in "Projekte" ändern. Was wären die genauen Schritte, die ich ausführen muss, um den Namen sicher zu ändern und zu verhindern, dass benutzerdefinierte Posts vom Typ "Posts" im Dashboard verschwinden?
Hinweis: Es gibt bereits Beiträge in portfolio
so kann ich nicht nur das Gerät , portfolio
mit 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;
}
}
custom-post-types
Desi
quelle
quelle
Antworten:
Wenn Sie noch keine Beiträge in Ihrem Portfolio haben.
Es wäre wirklich einfach. Benennen Sie alles mit "Portfolio" in "Projekte" um. Sie werden nichts verlieren und den Namen ändern.
Bearbeiten:
Verwenden Sie dieses Plugin http://wordpress.org/extend/plugins/ptypeconverter/ , um die aktuellen Beiträge sicher zu exportieren und in Ihren neuen benutzerdefinierten Beitragstyp zu importieren.
Die Schritte sind also:
1 Laden Sie das Plugin herunter und verwenden Sie es: http://wordpress.org/extend/plugins/ptypeconverter/
2 Kopieren Sie die "Portfolio" -Datei Ihres benutzerdefinierten Beitragstyps an einen sicheren Ort. Nennen Sie es zum Beispiel portfolio_post_typeBACKUP.php
3 Jetzt sind Sie sicher, wann diese Methode fehlschlägt. Sie können es wiederherstellen.
4 " Portfolio " in " Projekte " ändern
5 Importiere die Beiträge mit dem Plugin und der Bratsche!
Hoffe das klappt.
quelle
portfolio
.Sie können dies auch direkt mit MySQL tun.
Zwei Dinge zu beachten:
wp_postmeta
in serialisierten Arrays gespeichert haben, möchten Sie kein einfaches UPDATE / REPLACE durchführen, da es diese in die Luft sprengt! Nun, es sei denn, die neue und die alte Zeichenfolge haben genau dieselbe Länge.quelle
Erweitere Wills Antwort ein bisschen weiter ... und vor allem, wenn du es von deinem Plugin aus machst:
Die Änderung besteht hier darin, den alten Typ nicht direkt in der Guid zu ersetzen, sondern nur dann, wenn "post_type = old_type" oder "/ old_type /" vorhanden ist. Dadurch wird vermieden, dass aus Versehen gültige Butzen ersetzt werden. (z. B. ist Ihr benutzerdefinierter Beitragstyp Portfolio, und der Slug einer Seite enthält auch Portfolio.)
Eine andere Alternative ist, so etwas zu tun:
HTH!
quelle
Verwenden Sie eine WordPress-Datenbankabfrage, aber vergessen Sie nicht die serialisierten Optionsdaten
Die Methode, die für mich funktioniert hat, war das Suchen und Ersetzen in der WordPress-Datenbank, wobei jedoch darauf geachtet wurde, dass dabei keine serialisierten Optionsdaten verloren gehen. Der beste Weg, den ich gefunden habe, ist die Verwendung des Dienstprogramms zum sicheren Suchen und Ersetzen von Datenbanken über Interconnect .
SET
Führen= REPLACE(
Sie niemals eine Abfrage vom,'old_post_type','new_post_type')
Typ post_type durch, ohne zu wissen, was Sie tun. Andernfalls werden serialisierte Daten beschädigt , da sie eine Prüfsumme enthalten und nicht ordnungsgemäß deserialisiert werden können.Lesen Sie den Abschnitt zu potenziellen Problemen, bevor Sie ihm blindlings folgen
Schritt 1 - Aktualisieren Sie Ihre Datenbank sicher mit neuem Namen
Schritt 2 - Setzen Sie Ihre Permalinks zurück
Wenn Sie Permalinks verwenden, werden durch die Aktualisierungen Ihrer Datenbank die Weiterleitungen zu Ihren benutzerdefinierten Beitragstypen fehlerhaft. Es gibt jedoch eine einfache Lösung. Rufen Sie einfach die WordPress-Einstellungen / Permalinks auf und notieren Sie sich die aktuelle Einstellung (meine war "Postname"). Wechseln Sie dann wieder zur Standardeinstellung, klicken Sie auf "Speichern", kehren Sie zur vorherigen Einstellung zurück und speichern Sie erneut. Sie haben gerade Ihre Weiterleitungsprobleme behoben.
Schritt 3 - Benennen Sie die benutzerdefinierten Beitragstypvorlagen Ihres Themas um
Wenn Sie wie ich sind und benutzerdefinierte Beitragstypvorlagen erstellt haben, müssen Sie diese umbenennen, da Ihre benutzerdefinierten Beiträge sonst nicht mehr richtig aussehen. Gehen Sie einfach in Ihr Thema und suchen Sie nach einer Datei, deren Dateiname Ihren alten Beitragstyp enthält, und benennen Sie die Datei unter Verwendung Ihres neuen Beitragsnamens um. Zum Beispiel musste ich zu wechseln
single-project-portfolio.php
,single-before-after.php
als ich meinen Beitragstyp vonproject-portfolio
zu ändertebefore-after
.Schritt 5 - Beliebigen Code aktualisieren
Führen Sie eine Dateisuche durch und ersetzen Sie sie für Ihren alten benutzerdefinierten Beitragstypnamen im Ordner "Design" und "Plugins". Für mich gab es mehrere benutzerdefinierte Shortcodes, die darauf beruhten, eine Entscheidung zu treffen, ob ich einen meiner benutzerdefinierten Beitragstypen verwende.
Alles testen
Mögliche Probleme (vor dem Starten dieses Verfahrens lesen)
Syndication-ProblemeWenn Ihre benutzerdefinierten Beitragstypen syndiziert wurden, beachten Sie, dass durch das anfängliche Suchen und Ersetzen auch die Guids Ihrer Beiträge geändert werden, wodurch alle Abonnenten gezwungen werden, die alten Beiträge als neue zu betrachten. Ich musste mich damit nicht befassen, aber wenn nötig, sollten Sie die Tabellen, die das Dienstprogramm safesearch verarbeitet, manuell auswählen und dann alle nicht serialisierten Daten mit der folgenden Abfrage manuell aktualisieren:
quelle
WHERE 'post_type' LIKE '%old_post_type%'
, ich würde verwendenWHERE 'post_type' = 'old_post_type'
, da Ihr Weg auch einige andere Post-Typen verursachen könnte, zu ändern ..Ich habe nicht den Ruf, Kommentare abzugeben, daher werde ich dies hier einfügen. Das Beispiel von Will erweitern. Ich habe die LIKEs in "=" geändert und habe beide auf WHERE zeigen lassen
post_type
Denken Sie auch daran, unter Admin> Einstellungen> Permalinks auf "Änderungen speichern" zu klicken. Andernfalls werden Ihre Links wahrscheinlich beschädigt.
Sie müssen auch alle Vorlagennamen für einzelne Posts bearbeiten.
Dies sollte alles sein, was Sie tun müssen.
quelle
Hier ist ein sehr einfacher Weg:
quelle