如何根据这个数组注册侧边栏?

问题描述 投票:0回答:2

我有一个输入主题 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

php arrays wordpress filtering sidebar
2个回答
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 会被注册。 有更好的方法来实现这一目标吗? 预先感谢。


0
投票

我不会费心做一个单独的循环来过滤掉不合格的侧边栏。只需在迭代和注册侧边栏时执行检查即可。

代码:(演示

$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>',
        ]);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.