我正在处理窗口小部件区域(侧边栏)生成器,它会自动为窗口小部件区域名称添加一个数字后缀。
创建时所需的侧边栏名称输出应为
custom_sidebar_area1
custom_sidebar_area2
custom_sidebar_area3
...
如果删除custom_sidebar_area2
custom_sidebar_area1
custom_sidebar_area3
下一个创建的侧边栏应该再次
custom_sidebar_area2
之后的一个比custom_sidebar_area4
问题:
此代码段目前适用于创建,并保存在一系列区域和后缀索引中,以便跟踪下一个数字,
$custom_sidebars = get_theme_mod( 'custom_sidebars' );
$new_sidebar_name = $_POST['newSidebarName'];
$suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) + 1 : 1;
$custom_sidebars['areas']['custom_sidebar_area' . $suffix] = $new_sidebar_name ;
$custom_sidebars['suffix'] = $suffix;
保存时这是数组输出
array
(
[areas] => array
(
[custom_sidebar_area5] => 'Title'
[custom_sidebar_area6] => 'New widget area'
)
[suffix] => 6
)
现在这适用于创作,但我需要删除侧边栏 按照顺序并相应地更新后缀。
如果我使用过这样的东西
$old_sidebar_name = $_POST['oldSidebarName'];
$custom_sidebars = get_theme_mod( 'custom_sidebars' );
$suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) - 1 : 1;
unset( $custom_sidebars['areas'][$old_sidebar_name] );
$custom_sidebars['suffix'] = $suffix;
订单有效,直到您开始跳过删除,而不是删除最后一个,以便删除数字2.比下一个创建的侧边栏可以覆盖现有的侧边栏。
如果我在删除时不使用后缀更改,则后缀将始终增加,并且先前已删除所有已创建的侧边栏的用户(假设有5个),在新的侧边栏创建时将具有
custom_sidebar_area6
而不是
custom_sidebar_area1
摆脱这种情况的最佳方法是什么? 任何帮助表示赞赏。
答案 0 :(得分:1)
您可以创建一个扫描当前数组的函数来确定可用的后缀。
以下是我设置的小测试按预期工作:
$a = array('a1'=>1, 'a2'=>2, 'a3'=>4);
function getSuffix($a){
for($i=1; $i<=count($a)+1; $i++ ){
if( ! array_key_exists("a$i", $a) ){
return $i;
}
}
}
然后这一行:
$suffix = $custom_sidebars ? intval( $custom_sidebars['suffix'] ) - 1 : 1;
可以成为:
$suffix = $custom_sidebars ? getSuffix($custom_sidebars['area']) : 1;