Próbowałem przeprowadzić pewne badania na ten temat, ale nie znalazłem jeszcze niczego solidnego. Mam wtyczkę, nad którą pracuję i między ostatnią wersją a nową wersją wprowadziliśmy kilka aktualizacji widżetu, które zmieniają niektóre nazwy ustawień (na backendie) i mam problem z utworzeniem procedury aktualizacji, aby to zrobić.
To, co do tej pory zrobiłem, co wydaje się (głównie) działać, to:
$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 );
}
W większości moich testów działa to dobrze, ale problem polega na tym, że stary widget nie wyświetla już swoich danych wyjściowych. Wyświetlony zostanie tylko tytuł widżetu. Mogę to naprawić, przechodząc i zapisując każdy indywidualny widżet, a następnie będzie działał dobrze, ale nie chcę, aby moi użytkownicy to robili.
Myślałem, że coś takiego może działać:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Wygląda jednak na to, że save_settings()
połączenie musi być nieprawidłowe, ponieważ powoduje to całkowite usunięcie widżetu.
Mam problem ze znalezieniem jakiegokolwiek standardu dla czegoś takiego i chciałbym po prostu usłyszeć wszelkie przemyślenia, pomysły lub linki, które mogą być potrzebne do zrobienia czegoś takiego.
Z góry dziękuję za wszelką pomoc.
EDYTOWAĆ:
W rzeczywistości nie jest to pytanie o śledzenie kluczy licencyjnych lub aktualizację wtyczek, które nie są hostowane w repozytorium WP. Chodzi o to, aby zaktualizować ustawienia między 2 wersjami wtyczki podczas aktualizacji użytkownika.
Przykład:
wersja 1.0.0 ma pole ustawień name
W wersji 1.1.0 zdecydowaliśmy, że potrzebujemy zarówno imienia, jak i nazwiska, dlatego zmieniamy stare ustawienie na, first_name
a następnie dodajemy nowe last_name
.
Przeniesienie tych opcji, jeśli zostały zapisane jako meta post dla niestandardowego typu postu, nie stanowi problemu:
$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' );
Więc ta część jest łatwa. Problem z tym, co wydaje mi się niełatwe, to robienie tego samego, ale dla ustawień WIDGET.
Mamy nadzieję, że rozwiąże to wszelkie nieporozumienia i pomoże w łatwiejszym udzieleniu odpowiedzi.
EDYCJA 2:
Wynik echo '<pre>' . print_r( $widget, true ) . '</pre>';
z pierwszego fragmentu kodu powyżej:
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
)