J'ai essayé de faire des recherches à ce sujet mais je n'ai encore rien trouvé de solide. J'ai un plugin sur lequel je travaille et entre la dernière version et la nouvelle version, nous avons fait quelques mises à jour du widget qui modifie certains noms de paramètres (sur le backend) et j'ai du mal à créer une routine de mise à niveau pour ce faire.
Ce que j'ai fait jusqu'à présent et qui semble (surtout) fonctionner est le suivant:
$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 );
}
Dans la plupart de mes tests, cela fonctionne bien, mais le problème devient que l'ancien widget n'affiche plus sa sortie. Seul le titre du widget s'affichera. Je peux résoudre ce problème en enregistrant chaque widget individuel, puis cela fonctionnera correctement, mais je ne veux pas que mes utilisateurs le fassent.
Je pensais que quelque chose comme ça pourrait fonctionner:
$settings = $widgets->get_settings();
foreach( $settings as $s ) {
$s['setting1'] = $s['oldsetting1'];
$s['setting2'] = $s['oldsetting2'];
$widgets->save_settings( $s );
}
Mais il semble que l' save_settings()
appel doit être incorrect car cela supprime complètement le widget.
J'ai du mal à trouver une sorte de norme pour quelque chose comme ça et je voudrais juste entendre les pensées, les idées ou les liens que vous pourriez avoir pour faire quelque chose comme ça.
Merci d'avance pour votre aide.
ÉDITER:
Il ne s'agit en fait pas d'une question sur le suivi des clés de licence ou la mise à niveau des plugins qui ne sont pas hébergés sur le dépôt WP. Il s'agit plus de mettre à jour les paramètres entre 2 versions d'un plugin lors de la mise à niveau d'un utilisateur.
Exemple:
la version 1.0.0 a un champ de réglage name
Eh bien, dans la version 1.1.0, nous décidons que nous avons besoin du prénom et du nom, nous changeons donc l'ancien paramètre first_name
et ajoutons un nouveau paramètre last_name
.
Le transfert de ces options si elles sont enregistrées en tant que méta-publication pour un type de publication personnalisé ne pose aucun problème:
$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' );
Donc, cette partie est facile. Ce que j'ai du mal avec cela ne semble pas être facile, c'est de faire la même chose, mais pour les paramètres WIDGET.
J'espère que cela dissipera toute confusion et contribuera à faciliter la réponse.
EDIT 2:
Résultat echo '<pre>' . print_r( $widget, true ) . '</pre>';
du premier bloc de code ci-dessus:
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
)