我有一个PHP函数,它返回PHP list()格式的值。此函数返回一个WordPress分类法列表,其中包含一些手动添加的自定义条目。
/**
* Returns array with taxonomies
*/
public function get_taxonomies(){
$args = array(
'public' => true,
'_builtin' => false
);
$taxonomies = get_taxonomies($args, 'objects');
$list = array();
$list[__('Category', $this->prefix)] = 'category';
$list[__('Tag', $this->prefix)] = 'post_tag';
foreach($taxonomies as $tax){
$list[$tax->labels->name] = $tax->name;
}
return $list;
}
此函数返回以下数组值:
Array
(
[Category] => category
[Tag] => post_tag
[Product Categories] => product_cat
[Product Tags] => product_tag
[Shipping Classes] => product_shipping_class
)
数组的第一部分是分类法名称,第二部分是分类法值。
我将这些值显示为复选框列表,并将它们作为数组保存在我的数据库中。
这是我在数据库中保存的复选框列表数据。如果我print_r()列表的保存数据,则返回此内容:
Array
(
[category] => category
[post_tag] => post_tag
[product_cat] => product_cat
)
使用WordPress checked()函数我试图返回初始的分类法列表,其中保存在数据库中的值标记为HTML"已选中"。
以下是我的尝试:
// This is where I am trying to get at the saved values
$multi_stored = $options[$id];
$taxonomies = $this->get_taxonomies();
foreach($taxonomies as $name => $label){
$check_key = $id . '_' . $option;
$output .= '<input class="checkbox'.$field_class.'" type="checkbox" name="'.$this->prefix.'_options['.$id.']['.$label.']" id="'.$check_key.'" value="'.$label.'" '.checked($multi_stored[$label], $label, false ).' /><label for="'.esc_attr($name).'">'.esc_html($name).'</label><br />';
}
当我运行此代码时,我收到了以下PHP警告。
注意:未定义的索引:C:\ xampp \ htdocs \ wpbp-admin.php中的product_tag在线...
它给了我关于未选中的复选框列表中每个项目的警告。
我希望代码不会返回这些警告。我知道这是使用isset的问题,但我不知道在哪里放置它。
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
我得到了它的工作。
我改为&#34; Checked&#34;循环中的函数:
$multi_stored = $options[$id];
$taxonomies = $this->get_taxonomies();
foreach($taxonomies as $name => $label){
if(isset($multi_stored[$label])){
if($label == $multi_stored[$label]){
$checked = 'checked="checked"';
} else {
$checked = '';
}
} else {
$checked = '';
}
$check_key = $id . '_' . $label;
$output .= '<input class="checkbox'.$field_class.'" type="checkbox" name="'.$this->prefix.'_options['.$id.']['.$label.']" id="'.$check_key.'" value="'.$label.'" '.$checked.' /><label for="'.esc_attr($name).'">'.esc_html($name).'</label><br />';
}