Alanların numaralandırılması gerekiyorsa yukarıdaki yanıt iyidir. Benim durumumda, yapmadım. Kullanıcı widget içinde kullanılacak herhangi bir sayıda kategori seçmek için izin seçenekleri ile bir widget var.
İşte widget'ım form
. - Burada üç önemli şey var
array()
Widget'ın değeri ayarlanmamışsa , değeri varsayılan olarak boş olarak ayarladığınızdan emin olun
- Form
<label>
name
özniteliğinde, []
sonunda bir eklediğime dikkat edin . Bu PHP'ye bu anahtar için bir dizi değer gönderdiğimi söyler
- Onay kutusunu etikete sarın
<label><input type="checkbox" ...></label>
. - Bizim onay kutularını her biri benzersiz olmaz id
bu yüzden, niteliği <label>
for
özniteliği çalışma olmaz. Benzersiz kimlikler oluşturabiliriz, ancak bu bir güçlük. Etiketi yalnızca girişin etrafına sararsanız, etiket for
+id
Şimdi kod
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
}
İşte güncelleme fonksiyonum
Kullandığım yüzden sayılardır dizideki Kategorisi Kimlikleri, tasarruf ilgilenen kulüpler array_map
ile intval
gönderilen tüm veri geçerli tamsayı olmasını sağlamak için. Ayrıca, array_filter
geçersiz gönderimleri kaldırmak için kullanın .
// @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']
);
}
Bu WordPress öğelerini tanımlamak özellikle zor. Herhangi bir sorunuz varsa, ayrıntılı bilgi vermekten memnuniyet duyarım.
$instance
olduğu bir dizi ve tüm değerleri içerir. Ve 'tüm alanların verilerini tek bir satırda saklamak' ile ne demek istiyorsun? Şunu mu demek istediniz: bir database row?