उपरोक्त उत्तर अच्छा है यदि आपको खेतों की संख्या की आवश्यकता है। मेरे मामले में, मैंने ऐसा नहीं किया। मेरे पास विकल्पों के साथ एक विजेट है जो उपयोगकर्ता को विजेट के भीतर उपयोग की जाने वाली किसी भी श्रेणी का चयन करने की अनुमति देता है।
यहाँ मेरा विजेट है form
। - यहां तीन महत्वपूर्ण बातें
array()
यदि विजेट का मान सेट नहीं है, तो मान को रिक्त स्थान पर डिफ़ॉल्ट करना सुनिश्चित करें
- प्रपत्र
<label>
name
विशेषता में, ध्यान दें कि मैं []
अंत में संलग्न करता हूं । यह PHP को बताता है कि मैं इस कुंजी के लिए मानों की एक सरणी प्रस्तुत कर रहा हूं
- के रूप में लेबल में चेकबॉक्स लपेटें
<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
है एक सरणी और सभी मान हैं। और 'केवल एक पंक्ति में सभी क्षेत्रों के डेटा को संग्रहीत करने के लिए' से आपका क्या मतलब है? क्या आपका मतलब एक डेटाबेस पंक्ति से था?