Ho provato a fare qualche ricerca su questo, ma non ho ancora trovato nulla di solido. Ho un plug-in su cui sto lavorando e tra l'ultima versione e la nuova versione abbiamo apportato alcuni aggiornamenti al widget che modifica alcuni dei nomi delle impostazioni (sul back-end) e non riesco a creare una routine di aggiornamento per farlo.
Quello che ho fatto finora che sembra (principalmente) funzionare è questo:
$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 );
}
Nella maggior parte dei miei test questo funziona bene, ma il problema diventa che il vecchio widget non mostra più il suo output. Verrà mostrato solo il titolo del widget. Posso risolverlo andando e salvando ogni singolo widget e poi funzionerà bene, ma non voglio che i miei utenti lo facciano.
Ho pensato che qualcosa del genere potesse funzionare:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Ma sembra che la save_settings()
chiamata debba essere sbagliata perché questo rimuove completamente il widget.
Ho difficoltà a trovare qualsiasi tipo di standard per qualcosa del genere e vorrei solo sentire pensieri, idee o collegamenti che potresti dover fare per fare qualcosa del genere.
Grazie in anticipo per qualsiasi aiuto.
MODIFICARE:
Questa non è in realtà una domanda sul tracciamento delle chiavi di licenza o sull'aggiornamento dei plugin che non sono ospitati nel repository WP. Di cosa si tratta è l'aggiornamento delle impostazioni tra la versione 2 di un plug-in quando un utente esegue l'aggiornamento.
Esempio:
la versione 1.0.0 ha un campo di impostazione name
Bene nella versione 1.1.0 decidiamo che abbiamo bisogno sia del nome che del cognome, quindi cambiamo la vecchia impostazione first_name
e poi aggiungiamo una nuova impostazione last_name
.
Il trasferimento di queste opzioni se salvato come meta post per un tipo di post personalizzato non è un problema:
$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' );
Quindi quella parte è facile. Ciò di cui sto avendo problemi sembra non essere facile è fare la stessa cosa ma per le impostazioni di WIDGET.
Speriamo che questo chiarisca ogni confusione e aiuti a rendere più semplice la risposta.
MODIFICA 2:
Risultato del echo '<pre>' . print_r( $widget, true ) . '</pre>';
primo blocco di codice sopra:
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
)