Eu tentei fazer alguma pesquisa sobre isso, mas ainda não encontrei nada sólido. Tenho um plug-in no qual estou trabalhando e, entre a última versão e a nova, fizemos algumas atualizações no widget que alteram alguns dos nomes das configurações (no back-end) e estou tendo problemas para criar uma rotina de atualização para fazer isso.
O que eu fiz até agora que parece funcionar (principalmente) é o seguinte:
$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 );
}
Na maioria dos meus testes, isso funciona bem, mas o problema é que o widget antigo não exibe mais sua saída. Somente o título do widget será exibido. Eu posso consertar isso salvando cada widget individual e, em seguida, ele funcionará bem, mas não quero que meus usuários façam isso.
Eu pensei que algo assim poderia funcionar:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Mas parece que a save_settings()
chamada deve estar errada, porque isso remove completamente o widget.
Estou tendo problemas para encontrar qualquer tipo de padrão para algo assim e gostaria de ouvir quaisquer pensamentos, idéias ou links que você possa ter para fazer algo assim.
Agradecemos antecipadamente por qualquer ajuda.
EDITAR:
Na verdade, essa não é uma pergunta sobre o rastreamento de chaves de licença ou a atualização de plug-ins que não estão hospedados no repositório WP. O que é mais importante é atualizar as configurações entre a versão 2 de um plug-in quando um usuário atualiza.
Exemplo:
a versão 1.0.0 possui um campo de configuração name
Bem, na versão 1.1.0, decidimos que precisamos do nome e do sobrenome, portanto alteramos a configuração antiga first_name
e adicionamos uma nova last_name
.
Transferir essas opções se salvas como meta postagem para um tipo de postagem personalizado não é 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' );
Então essa parte é fácil. O que eu estou tendo problemas com isso parece não ser fácil é fazer a mesma coisa, mas com as configurações do WIDGET.
Espero que isso esclareça qualquer confusão e ajude a facilitar a resposta.
EDIT 2:
Resultado echo '<pre>' . print_r( $widget, true ) . '</pre>';
do primeiro pedaço de código acima:
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
)