Я спробував зробити деякі дослідження з цього приводу, але поки не знайшов нічого твердого. У мене є плагін, над яким я працюю, і між останньою версією та новою версією ми здійснили кілька оновлень віджета, який змінює деякі імена налаштувань (на бекенді), і у мене виникають проблеми зі створенням процедури оновлення для цього.
Що я зробив досі, що, здається, (в основному) працює, це:
$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 );
}
У більшості моїх тестів це працює нормально, але проблема полягає в тому, що старий віджет більше не відображає його вихід. Показуватиметься лише назва віджета. Я можу це виправити, перейшовши і збереживши кожен окремий віджет, і тоді він буде добре працювати, але я не хочу змушувати своїх користувачів робити це.
Я думав, що щось подібне може спрацювати:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Але здається, що save_settings()
виклик повинен бути неправильним, оскільки це повністю видаляє віджет.
У мене виникають проблеми з пошуком будь-якого стандарту для чогось подібного, і я просто хотів би почути будь-які думки, ідеї чи посилання, які, можливо, доведеться робити щось подібне.
Заздалегідь дякую за будь-яку допомогу.
Редагувати:
Це насправді не питання про відстеження ліцензійних ключів або оновлення плагінів, які не розміщуються на WP репо. Більш того, це стосується оновлення налаштувань між двома версіями плагіна, коли користувач оновлює.
Приклад:
версія 1.0.0 має поле налаштування name
Добре, що у версії 1.1.0 ми вирішили, що нам потрібно і ім’я, і прізвище, тому ми змінимо старі настройки, first_name
а потім додамо нове налаштування last_name
.
Перенесення цих параметрів, якщо збережено як мета публікації для спеціального типу публікації, не є проблемою:
$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' );
Тож ця частина проста. З чим у мене виникають проблеми, схоже, це не просто, це те саме, але для налаштувань WIDGET.
Сподіваємось, це усуне будь-яку плутанину і допоможе полегшити відповідь на це.
EDIT 2:
Результат echo '<pre>' . print_r( $widget, true ) . '</pre>';
першого фрагмента коду вище:
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
)