ฉันได้ลองทำวิจัยเรื่องนี้แล้ว แต่ยังไม่พบว่ามีอะไรที่แข็ง ฉันมีปลั๊กอินที่ฉันใช้งานและระหว่างเวอร์ชันล่าสุดและเวอร์ชันใหม่ที่เราได้ทำการปรับปรุงบางอย่างสำหรับวิดเจ็ตที่เปลี่ยนชื่อการตั้งค่าบางส่วน (ในแบ็กเอนด์) และฉันมีปัญหาในการสร้างรูทีนการอัพเกรดเพื่อทำสิ่งนี้
สิ่งที่ฉันได้ทำจนถึงตอนนี้ที่ดูเหมือนว่าจะทำงาน (ส่วนใหญ่) คือ:
$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()
โทรจะต้องผิดเพราะจะลบเครื่องมือทั้งหมด
ฉันมีปัญหาในการค้นหามาตรฐานใด ๆ สำหรับสิ่งนี้และต้องการฟังความคิดความคิดหรือลิงก์ที่คุณอาจต้องทำอะไรแบบนี้
ขอบคุณล่วงหน้าสำหรับความช่วยเหลือใด ๆ
แก้ไข:
นี่ไม่ใช่คำถามเกี่ยวกับการติดตามคีย์ใบอนุญาตหรือการอัปเกรดปลั๊กอินที่ไม่ได้โฮสต์บน repo 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
)