我有一个输入主题 mod,它返回以下值: 边一:1,边二:1,边三:0
这是一个多复选框输入,“,”之前的每个元素代表一个侧边栏 - 一个复选框...“:”之前的数字代表其状态,1 表示活动,0 表示不活动。
问题是,使用 foreach 我是否可以为活动的元素或“:”后的 1 注册侧边栏 我尝试了很多次,但没有成功,因为我的 php 知识还不够:)。 我希望我的解释足够了。
Array (
[0] => Array
(
[0] => sideone
[1] => 1
)
[1] => Array
(
[0] => sidetwo
[1] => 1
)
[2] => Array
(
[0] => sidethree
[1] => 0
)
)
可以为每个值为 1 的数组键注册侧边栏吗?不是0
这就是我解决问题的方法:
如您所知,输入返回:sideone:1,sidetwo:1,sidethird:0 等,1 表示活动状态,0 表示非活动状态。它可以根据 WP 定制器控制输入为每个侧边栏返回 0 或 1。
$input = 'sideone:1,sidetwo:1,sidethree:0';
首先我用它制作了一个数组
$all_sidebars = explode(',',$input);
之后,我从该数组中删除了任何具有非活动状态的侧边栏(在我的情况下为 0),因此如果输入返回侧边栏之一的 sideone:0 (等),则该侧边栏将不再被注册。
$active_only = array_diff($all_sidebars, ["sideone:0", "sidetwo:0", "sidethree:0"]);
之后我用 foreach 注册了它们
foreach ( $active_only as $id => $sidebar) {
register_sidebar(
array (
'name' => __( 'Footer Column ' . $id, 'wecodeart' ),
'id' => 'footer-'.$id,
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
));
}
所以在这种情况下只有侧边栏 1 和侧边栏 2 会被注册。 有更好的方法来实现这一目标吗? 预先感谢。
我不会费心做一个单独的循环来过滤掉不合格的侧边栏。只需在迭代和注册侧边栏时执行检查即可。
代码:(演示)
$input = 'sideone:1,sidetwo:1,sidethree:0';
foreach (explode(',', $input) as $pair) {
if (preg_match('/^([^:]+):1$/', $pair, $m)) {
register_sidebar([
'name' => __('Footer Column ' . $m[1], 'wecodeart'),
'id' => 'footer-' . $m[1],
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h2 class="widget-title">',
'after_title' => '</h2>',
]);
}
}