私はこれについていくつかの研究を試みましたが、まだ確かなものは何も見つかりませんでした。私が作業しているプラグインがあり、前のバージョンと新しいバージョンの間で、(バックエンドの)設定名の一部を変更するウィジェットにいくつかの更新を行いました。これを行うためのアップグレードルーチンの作成に問題があります。
これまで(ほとんど)機能しているように思われるのは次のとおりです。
$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リポジトリでホストされていないプラグインのアップグレードに関する問題ではありません。これは、ユーザーがアップグレードするときに、プラグインの2つのバージョン間で設定を更新することの詳細です。
例:
バージョン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' );
その部分は簡単です。私が困っているのは簡単ではないようですが、これと同じことを行うのはウィジェット設定です。
うまくいけば、これで混乱が解消され、簡単に答えられるようになります。
編集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
)