Saya sudah mencoba melakukan penelitian tentang ini tetapi belum menemukan sesuatu yang solid. Saya memiliki plugin yang sedang saya kerjakan dan antara versi terakhir dan versi baru kami membuat beberapa pembaruan pada widget yang mengubah beberapa nama pengaturan (di backend) dan saya mengalami masalah dalam membuat rutin upgrade untuk melakukan ini.
Apa yang telah saya lakukan sejauh ini yang tampaknya (sebagian besar) berhasil adalah ini:
$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 );
}
Dalam sebagian besar pengujian saya ini berhasil, tetapi masalahnya adalah bahwa widget lama tidak lagi menampilkan outputnya. Hanya judul widget yang akan ditampilkan. Saya dapat memperbaikinya dengan membuka dan menyimpan masing-masing widget dan kemudian itu akan berfungsi dengan baik, tetapi saya tidak ingin membuat pengguna saya melakukan itu.
Saya pikir sesuatu seperti ini mungkin berhasil:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Tapi sepertinya save_settings()
panggilan itu pasti salah karena ini menghapus widget sepenuhnya.
Saya mengalami kesulitan menemukan standar apa pun untuk sesuatu seperti ini dan hanya ingin mendengar pemikiran, gagasan, atau tautan apa pun yang mungkin harus Anda lakukan seperti ini.
Terima kasih sebelumnya atas bantuannya.
EDIT:
Ini sebenarnya bukan pertanyaan tentang melacak kunci lisensi atau meningkatkan plugin yang tidak di-host di WP repo. Tentang ini adalah memperbarui pengaturan antara 2 versi plugin ketika pengguna melakukan upgrade.
Contoh:
versi 1.0.0 memiliki bidang pengaturan name
Nah di versi 1.1.0 kami memutuskan kami membutuhkan nama depan dan belakang sehingga kami mengubah pengaturan lama menjadi first_name
dan kemudian menambahkan pengaturan baru last_name
.
Mentransfer opsi-opsi ini jika disimpan sebagai meta pos untuk jenis pos khusus tidak ada masalah:
$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' );
Sehingga bagian itu mudah. Apa yang saya mengalami masalah dengan yang tampaknya tidak mudah adalah melakukan hal yang sama tetapi untuk pengaturan WIDGET.
Semoga ini akan menjernihkan kebingungan dan membantu membuat ini menjadi lebih mudah untuk dijawab.
EDIT 2:
Hasil dari echo '<pre>' . print_r( $widget, true ) . '</pre>';
potongan kode pertama di atas:
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
)