Bu konuda biraz araştırma yapmayı denedim ama henüz sağlam bir şey bulamadım. Üzerinde çalıştığım bir eklenti var ve son sürüm ile yeni sürüm arasında bazı ayar adlarını (arka uçta) değiştiren widget'a bazı güncellemeler yaptık ve bunu yapmak için bir yükseltme rutini oluşturmada sorun yaşıyorum.
Şimdiye kadar yaptığım (çoğunlukla) iş gibi görünüyor:
$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 );
}
Testlerimin çoğunda bu iyi çalışıyor, ancak sorun eski widget'ın artık çıktısını görüntülememesine neden oluyor. Yalnızca widget'ın başlığı gösterilir. Her bir widget'ı kaydedip kaydederek bunu düzeltebilirim ve sonra iyi çalışır, ancak kullanıcılarımın bunu yapmasını istemiyorum.
Böyle bir şeyin işe yarayabileceğini düşündüm:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Ancak, save_settings()
aramanın yanlış olması gerektiği anlaşılıyor çünkü bu, widget'ı tamamen kaldırıyor.
Ben böyle bir şey için herhangi bir standart bulmakta sorun yaşıyorum ve sadece böyle bir şey yapmak zorunda kalabilirsiniz herhangi bir düşünce, fikir veya bağlantıları duymak istiyorum.
Herhangi bir yardım için şimdiden teşekkürler.
DÜZENLE:
Bu aslında lisans anahtarlarını izleme veya WP deposunda bulunmayan eklentileri yükseltme hakkında bir soru değildir. Bunun hakkında daha fazla bilgi, kullanıcı yükselttiğinde eklentinin 2 sürümü arasındaki ayarları güncellemektir.
Misal:
1.0.0 sürümünde ayar alanı var name
1.1.0 sürümünde hem adın hem de soyadın gerekli olduğuna karar veriyoruz, bu nedenle eski ayarı değiştirip first_name
yeni bir ayar ekliyoruz last_name
.
Özel bir gönderi türü için gönderi meta olarak kaydedildiyse bu seçenekleri aktarmak sorun değildir:
$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' );
Yani bu kısım kolay. Bu kadar kolay görünmüyor gibi sorun yaşıyorum ne aynı şey ama WIDGET ayarları için yapıyor.
Umarım bu herhangi bir karışıklığı giderir ve bunun cevaplanmasını kolaylaştırır.
DÜZENLEME 2:
echo '<pre>' . print_r( $widget, true ) . '</pre>';
Yukarıdaki ilk kod grubunun sonucu:
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
)