나는 이것에 대한 연구를 시도했지만 아직 견고한 것을 찾지 못했습니다. 마지막 버전과 새 버전 사이에서 작업하는 플러그인이 있는데 일부 설정 이름 (백엔드)을 변경하는 위젯을 업데이트했으며이를 수행하기 위해 업그레이드 루틴을 만드는 데 문제가 있습니다.
내가 지금까지 한 일은 (주로) 일하는 것 같습니다.
$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' );
그래서 그 부분은 쉽습니다. 내가 어려움을 겪고있는 것은 쉬운 일이 아닌 WIDGET 설정에 대한 것입니다.
잘하면 이것은 혼란을 없애고 더 쉽게 대답 할 수 있도록 도와 줄 것입니다.
편집 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
)