আমি এ নিয়ে কিছু গবেষণা করার চেষ্টা করেছি কিন্তু এখনও শক্ত কিছু পাই নি। আমার একটি প্লাগইন রয়েছে যা আমি শেষ সংস্করণ এবং নতুন সংস্করণের মধ্যে এবং উইজেটের সাথে কিছু আপডেট করেছি যা সেটিংসের কিছু নাম (ব্যাকএন্ডে) পরিবর্তন করে এবং এটি করতে আপগ্রেড রুটিন তৈরি করতে আমার সমস্যা হচ্ছে।
আমি এ পর্যন্ত যা করেছি যা দেখে মনে হয় (বেশিরভাগ ক্ষেত্রে) কাজটি হ'ল:
$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()
কলটি অবশ্যই ভুল হতে হবে কারণ এটি পুরোপুরি উইজেটটিকে সরিয়ে দেয়।
এর মতো কিছু করার জন্য যে কোনও প্রকারের মান খুঁজে পেতে আমার সমস্যা হচ্ছে এবং ঠিক এরকম কিছু করার জন্য আপনার কোনও ধারণা, ধারণা বা লিঙ্কগুলি শুনতে চাই।
কোনো সাহায্যের জন্য আগাম ধন্যবাদ।
সম্পাদনা করুন:
এটি আসলে লাইসেন্স কীগুলি ট্র্যাকিং বা ডাব্লুপি রেপোতে হোস্ট করা নেই এমন প্লাগইনগুলি আপগ্রেড করার বিষয়ে কোনও প্রশ্ন নয়। এটি আরও বেশি কী তা যখন কোনও ব্যবহারকারী আপগ্রেড হয় তখন একটি প্লাগইনের 2 সংস্করণের মধ্যে সেটিংস আপডেট করা।
উদাহরণ:
সংস্করণ 1.0.0 একটি সেটিং ক্ষেত্র আছে name
ভার্সন ১.১.০ এ আমরা সিদ্ধান্ত নিই যে আমাদের প্রথম এবং শেষ নাম উভয়ই দরকার তাই আমরা পুরানো সেটিংটি পরিবর্তন করে 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
)