我是我的第一个Settings API应用程序, 遇到了麻烦。
在子菜单页面中, 我需要为从另一个设置检索的每个值生成多个字段(例如颜色选择器)。
更准确地说, 我在另一个菜单页面中创建了类别复选框列表:
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_'.$category->
cat_ID] ) ) ? $options['fp_sp_category_'.$category->
cat_ID] : '';
if($selected){
echo '<
li>
<
input type="checkbox" value="'.$category->
cat_ID.'" name="bcio_options[fp_sp_category_'.$category->
cat_ID.']" checked/>
'.$category->
name.'<
/li>
';
} else {
echo '<
li>
<
input type="checkbox" value="'.$category->
cat_ID.'" name="bcio_options[fp_sp_category_'.$category->
cat_ID.']"/>
'.$category->
name.'<
/li>
';
}}echo '<
/ul>
';
}
在第二个选项页面中, 我使用选项值在另一个设置部分中生成相应的字段:
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');
$categories = bcio_get_categories();
foreach($categories as $category){
$selected = ( isset( $options['fp_sp_category_'.$category->
cat_ID] ) ) ? $options['fp_sp_category_'.$category->
cat_ID] : '';
$cat_id = $category->
cat_ID;
if($selected){
add_settings_field(
'bcio_special_cat_'.$category->
cat_ID, 'Special Section:<
br />
'.$category->
name, 'bcio_special_section_display("'.$cat_id.'")', 'business-cover-special-sections', 'bcio_special_sections_options'
);
}
}}
//The field itself
function bcio_special_section_display($cat_id){$special_options = (array)get_option('bcio_special_options');
$color =( isset( $special_options['color'] ) ) ? $special_options['color'] : '';
echo '<
input type="text" name="bcio_options[color]" value="' . $color . '" class="bc-color-field" >
';
}
这成功地生成了适当数量的字段, 在字段标签中应用了类别的名称, 但是当我尝试使用回调时, 由于参数$ cat_id我在字段回调中传递而无法正常工作, 所以我觉得很混乱它会。
警告:call_user_func()期望参数1为有效的回调, 函数’ bcio_special_section_display(” 12285″ )’ 未找到或/ nas / wp / www / cluster-2598 / businesscover / wp-admin / includes / template中的函数名称无效.php行1237我尝试了几种方法来戳戳, 但是没有运气, 我真的需要找出一种方法来与类别ID关联存储选项, 而无需对ID本身进行硬编码。
最重要的是让此功能与Settings API或某些非插件解决方案一起正确运行。我有一个基于Elliot Condon的ACF的版本, 但不想让主题依赖于第3方插件。这些字段中的设置将为站点的特殊部分定义LESS变量, 徽标等。正确方向的任何提示将不胜感激。
#1现在已解决此问题。如果有人发现它有用, 我会发布解决方案。
我修改了回调以添加类别的复选框列表, 以便将选定的类别保存在数组中, 而不是单独的选项中。这将使查找所述特殊类别并将其与前端中的queried_object相匹配变得更加容易。
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选项另存为color_ $ 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" >
';
}
我已经按类别的颜色字段测试了该解决方案。颜色已正确保存, 并且, 如果设置了, 则显示为先前配置的颜色。
我希望其他人认为该解决方案有帮助。如果发现任何问题, 我将发布此线程的更新。
【带有设置API的WordPress动态选项字段】编码愉快!
推荐阅读
- WordPress(使用过滤器在加载时显示特定类别)
- WordPress(rewind_posts(),wp_reset_postdata()和wp_reset_query()之间的区别)
- WordPress自定义主题-在footer.php中调用时菜单不显示
- WordPress的显示自定义帖子类型
- WordPress(”自定义字段”,”元框”和”分类”之间的区别)
- wordpress数据库未显示在PhpMyAdmin中
- WordPress自定义帖子类型分类模板
- WordPress自定义表单在管理面板上提交数据视图()
- WordPress自定义帖子类型和类别,在index.php中查询时不会从自定义帖子类型中显示帖子