Ich habe versucht, diesbezüglich Nachforschungen anzustellen, aber noch nichts Festes gefunden. Ich habe ein Plugin, an dem ich arbeite, und zwischen der letzten Version und der neuen Version haben wir einige Aktualisierungen am Widget vorgenommen, die einige der Einstellungsnamen (im Backend) ändern, und ich habe Probleme, eine Upgrade-Routine zu erstellen, um dies zu tun.
Was ich bisher getan habe, was (meistens) zu funktionieren scheint, ist Folgendes:
$widget = get_option( 'widget_name' );
if( is_array( $widget ) && ! empty( $widget ) ) {
foreach( $widget as $a => $b ) {
if( ! is_array( $b ) ) {
continue;
}
foreach( $b as $k => $v ) {
$widget[$a]['setting1'] = $widget[$a]['oldsetting1'];
$widget[$a]['setting2'] = $widget[$a]['oldsetting2'];
}
}
update_option( 'widget_name', $widget );
}
In den meisten meiner Tests funktioniert dies in Ordnung, aber das Problem besteht darin, dass das alte Widget seine Ausgabe nicht mehr anzeigt. Es wird nur der Titel des Widgets angezeigt. Ich kann dies beheben, indem ich jedes einzelne Widget speichere. Dann funktioniert es einwandfrei, aber ich möchte meine Benutzer nicht dazu bringen, dies zu tun.
Ich dachte, so etwas könnte funktionieren:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Es scheint jedoch, dass der save_settings()
Aufruf falsch sein muss, da dadurch das Widget vollständig entfernt wird.
Ich habe Probleme, einen Standard für so etwas zu finden, und möchte nur Gedanken, Ideen oder Links hören, die Sie möglicherweise benötigen, um so etwas zu tun.
Vielen Dank im Voraus für jede Hilfe.
BEARBEITEN:
Dies ist eigentlich keine Frage zum Verfolgen von Lizenzschlüsseln oder zum Aktualisieren von Plugins, die nicht auf dem WP-Repo gehostet werden. Hier geht es mehr darum, die Einstellungen zwischen zwei Versionen eines Plugins zu aktualisieren, wenn ein Benutzer ein Upgrade durchführt.
Beispiel:
Version 1.0.0 hat ein Einstellungsfeld name
Nun, in Version 1.1.0 entscheiden wir, dass wir sowohl Vor- als auch Nachnamen benötigen, also ändern wir die alte Einstellung first_name
und fügen dann eine neue Einstellung hinzu last_name
.
Das Übertragen dieser Optionen, wenn sie als Post-Meta für einen benutzerdefinierten Post-Typ gespeichert sind, ist kein Problem:
$old_name = get_post_meta( $post->ID, 'name', true );
$first_name = update_post_meta ( $post->ID, 'first_name', true );
delete_post_meta( $post->ID, 'name' );
Dieser Teil ist also einfach. Was ich damit zu tun habe, scheint nicht einfach zu sein, dasselbe zu tun, aber für WIDGET-Einstellungen.
Hoffentlich wird dies Verwirrung beseitigen und dazu beitragen, dass dies leichter zu beantworten ist.
EDIT 2:
Ergebnis des echo '<pre>' . print_r( $widget, true ) . '</pre>';
ersten Codeblocks oben:
Array
(
[2] => Array
(
[title] => Class Schedule
[id] => 23
[display_type] => grid
[order] => asc
[display_title_text] => Events on
[paging] => 1
[list_max_num] => 7
[list_max_length] => days
[list_start_offset_num] => 0
[list_start_offset_direction] => back
[gce_per_page_num] => 7
[gce_events_per_page] => days
)
[3] => Array
(
[title] => Examples
[id] => 24
[display_type] => grid
[order] => asc
[display_title_text] => Events on
[paging] => 1
[list_max_num] => 7
[list_max_length] => days
[list_start_offset_num] => 0
[list_start_offset_direction] => back
[gce_per_page_num] => 7
[gce_events_per_page] => days
)
[_multiwidget] => 1
)