필드에 번호를 매기려면 위의 대답이 좋습니다. 제 경우에는 그렇지 않았습니다. 사용자가 위젯 내에서 사용할 범주를 원하는 수만큼 선택할 수있는 옵션이있는 위젯이 있습니다.
여기 내 위젯이 form
있습니다. — 여기서 중요한 세 가지
array()
위젯 값이 설정되지 않은 경우 기본값을 빈 값으로 설정하십시오
- 양식
<label>
name
속성 []
에서 끝에 a 를 첨부합니다 . 이것은 PHP 에게이 키에 대한 값의 배열을 제출하고 있음을 알려줍니다.
- 라벨의 확인란을로 포장합니다
<label><input type="checkbox" ...></label>
. - 우리의 체크 박스의 각각은 고유 한 필요가 없습니다 id
그렇게, 속성을 <label>
for
속성이 작동하지 않습니다. 고유 ID를 생성 할 수는 있지만 번거 롭습니다. 입력 주위 에 레이블을 감싸면 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
}
그리고 여기 내 업데이트 기능이 있습니다
내가 사용하는, 그래서 나는, 숫자 배열의 카테고리 ID를 절약에 관심 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
인 배열의 모든 값을 포함한다. 그리고 '모든 필드의 데이터를 한 행에 저장하는 것'은 무엇을 의미합니까? 하나의 데이터베이스 행을 의미 했습니까?