此问题现已解决。我正在发布解决方案,以防其他人发现它有用。
我修改了回调以添加类别的复选框列表,以便将选定的类别保存在数组中,而不是单独的选项。这样可以更容易地找到所述特殊类别,并将其与前端查询的\\u对象进行匹配。
function bcio_fp_special_cats_display(){
$options = (array)get_option(\'bcio_options\');
$categories = bcio_get_categories();
echo \'<ul>\';
foreach($categories as $category){
$selected = ( isset( $options[\'fp_sp_category\'] ) ) ? $options[\'fp_sp_category\'] : \'\';
if(in_array($category->cat_ID, $selected)){
echo \'<li><input type="checkbox" value="\'.$category->cat_ID.\'" name="bcio_options[fp_sp_category][]" checked/>\'.$category->name.\'</li>\';
} else {
echo \'<li><input type="checkbox" value="\'.$category->cat_ID.\'" name="bcio_options[fp_sp_category][]"/>\'.$category->name.\'</li>\';
}
}
echo \'</ul>\';
}
然后,根据这个新数组中包含的值(类别ID),我生成设置字段,并将类别ID作为字段的参数:
function bcio_special_section_settings_display(){
echo "These settings fields are generated based on your selection of Special Front Page Categories";
$options = (array)get_option(\'bcio_options\');
$selected = ( isset( $options[\'fp_sp_category\'] ) ) ? $options[\'fp_sp_category\'] : \'\';
if($selected){
foreach($selected as $cat_id){
add_settings_field(
\'section_\'.$cat_id,
\'Special Section:<br />\'.get_cat_name( $cat_id ),
\'bcio_special_section_display\',
\'business-cover-special-sections\',
\'bcio_special_sections_options\',
$cat_id
);
}
}
}
然后,我使用参数为字段指定一个唯一的ID,并将颜色选项保存为color\\uu$mycatid。
function bcio_special_section_display($args){
$special_options = (array)get_option(\'bcio_special_options\');
$color = ( isset( $special_options[\'color_\'.$args] ) ) ? $special_options[\'color_\'.$args] : \'\';
echo \'<input type="text" id="color-\'.$args.\'" name="bcio_special_options[color_\'.$args.\']" value="\' . $color . \'" class="bc-color-field" >\';
}
我已经用每个类别的颜色字段测试了解决方案。颜色已正确保存,如果设置,则显示为先前配置的颜色。
我希望其他人会觉得这个解决方案很有帮助。如果我发现任何问题,我将发布此线程的更新。
快乐的编码!