উপরের উত্তরটি আপনার ক্ষেত্রগুলি সংখ্যাযুক্ত করার প্রয়োজন হলে ভাল। আমার ক্ষেত্রে, আমি না। আমার কাছে বিকল্পগুলির সাথে একটি উইজেট রয়েছে যা ব্যবহারকারীকে উইজেটের মধ্যে যে কোনও সংখ্যক বিভাগ নির্বাচন করতে দেয়।
এই আমার উইজেট form
। - এখানে তিনটি গুরুত্বপূর্ণ জিনিস
array()
উইজেটের মান সেট না করা থাকলে মানটি শূন্যে ডিফল্ট করার বিষয়টি নিশ্চিত করুন
- ফর্মটি
<label>
name
অ্যাট্রিবিউটে লক্ষ্য করুন যে আমি []
শেষে একটি সংযুক্ত করেছি । এটি পিএইচপিকে বলে যে আমি এই কীটির জন্য মানগুলির একটি অ্যারে জমা দিচ্ছি
- হিসাবে লেবেলে চেকবক্সটি মোড়ানো
<label><input type="checkbox" ...></label>
। - আমাদের প্রতিটি চেকবাক্সের একটি অনন্য বৈশিষ্ট্য থাকবে না id
, সুতরাং <label>
for
বৈশিষ্ট্যটি কার্যকর হবে না। আমরা অনন্য আইডি তৈরি করতে পারি, তবে এটি একটি ঝামেলা। আপনি যদি কেবল ইনপুটটির চারপাশে লেবেলটি মুড়ে রাখেন তবে for
+ টি সংযোগের ঝামেলা ছাড়াই লেবেলটি সঠিকভাবে যুক্ত হয়ে যায়id
এখন কোড
public function form($instance) {
$title = isset($instance['title']) ? $instance['title'] : '';
$categories = isset($instance['categories']) ? $instance['categories'] : array();
?>
<p>
<label for="<?php echo $this->get_field_id('title') ?>">
<?php _e( 'Title:' ) ?>
</label>
<input class="widefat"
id="<?php echo $this->get_field_id('title') ?>"
name="<?php echo $this->get_field_name('title') ?>"
value="<?php echo $title ?>" />
</p>
<p>Categories</p>
<ul>
<?php foreach (\get_categories() as $category): ?>
<li>
<label>
<input type="checkbox"
class="checkbox"
name="<?php echo $this->get_field_name('categories') ?>[]"
value="<?php echo $category->cat_ID ?>"
<?php checked(in_array($category->cat_ID, $categories)) ?> />
<?php echo $category->name ?>
</label>
</li>
<?php endforeach ?>
</ul>
<?php
}
এবং এখানে আমার আপডেট ফাংশন
আমি একটি অ্যারের বিভাগ আইডি, যা সংখ্যা সংরক্ষণে আগ্রহী তাই আমি ব্যবহার array_map
সঙ্গে intval
তা নিশ্চিত করার জন্য সব পৃষ্ঠা উপাত্ত বৈধ পূর্ণসংখ্যা। অতিরিক্তভাবে, আমি array_filter
কোনও অবৈধ জমাগুলি অপসারণ করতে ব্যবহার করি ।
// @param array $a - the new instance options
// @param arram $b - the old instance options
public function update($a, $b) {
return array(
'title' => isset($a['title']) ? strip_tags($a['title']) : $b['title'],
'categories' => isset($a['categories']) ? array_filter(array_map(function($id) { return intval($id); }, (array) $a['categories'])) : (array) $b['title']
);
}
এই ওয়ার্ডপ্রেস স্টাফ বর্ণনা করা বিশেষত চ্যালেঞ্জিং। আপনার যদি কোনও প্রশ্ন থাকে তবে আমি বিস্তারিত জানাতে খুশি হব।
$instance
হয় একটি অ্যারের এবং সব মান ধারণ করে। এবং 'কেবলমাত্র এক সারিতে সমস্ত ক্ষেত্রের ডেটা সঞ্চয় করতে' বলতে কী বোঝায়? আপনি কি একটি ডাটাবেস সারি বোঝাতে চেয়েছিলেন?