主题定制器-设置顺序


10

如果我在一个部分中添加了5个以上的设置,则设置的顺序会变得很奇怪。

例如:

// Link color
$wp_customize->add_setting( 'tonal_'.$themeslug.'_settings[link_color1]', array(
    'default'           => $themeOptions['link_color1'],
    'type'              => 'option',
    'sanitize_callback' => 'sanitize_hex_color',
    'capability'        => 'edit_theme_options',
    'transport'         => 'postMessage'
) );
$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'tonal_'.$themeslug.'_settings[link_color1]', array(
    'label'    => __( 'Link color1', 'tonal' ),
    'section'  => 'colors',
    'settings' => 'tonal_'.$themeslug.'_settings[link_color1]',
    'choices'  => '#ffffff'
) ) );

pastebin中的其他示例-无到期时间

颜色从1到7进行编号,但在设置中按以下顺序显示:2、1、3、4、6、5、7

有人经历过吗?

还是有人甚至不知道该如何解决?


当然,它拼写为“ cusomizer”吗?;)
kaiser 2012年

1
thx ... fixed = D
xsonic 2012年

Answers:


9

如果您需要按特定顺序排列它们,则将优先级值赋予控件。否则,它们的顺序未定义且无法保证。

如果未定义优先级,则控件将获得默认优先级“ 10”。

当两个控件具有相同的优先级时,结果顺序是不确定的,因为这就是PHP的工作方式


2
哦,我的...太简单了。不知道优先级值也适用于控件。非常感谢!
xsonic 2012年

1

清理

迭代对于调试而言要容易得多,因为您将看到逐步的信息:

»将其添加到那之后会发生什么?«

因此,只需从清理开始,看看它是如何添加的。

foreach ( range( 1, 7 ) as $nr )
{
    $wp_customize->add_setting( 
        "tonal_{$themeslug}_settings[link_color{$nr}]",
        array(
            'default'           => $themeOptions[ "link_color{$nr}" ],
            'type'              => 'option',
            'sanitize_callback' => 'sanitize_hex_color',
            'capability'        => 'edit_theme_options',
            'transport'         => 'postMessage'
        )
    );
    $wp_customize->add_control(
        new WP_Customize_Color_Control(
            $wp_customize,
            "tonal_{$themeslug}_settings[link_color{$nr}]",
            array(
                'label'    => __( sprintf( 'Link color%s', $nr ), 'tonal' ),
                'section'  => 'colors',
                'settings' => "tonal_{$themeslug}_settings[link_color{$nr}]",
                'choices'  => '#ffffff'
            ) 
        ) 
    );

    // DEBUG:
    echo '<pre>'; var_export( $wp_customize, true ); echo '</pre>';
}

排序

机会很大,您可以使用默认的php排序机制来解决它。只是看一下输出,然后看看您可以使用简单的数组排序来做什么(提示:您可以轻松地键入cast (array) $object(object) $array


谢谢你的帮助。至此,一切都以正确的顺序进行。我认为,必须在核心类中的任何位置混合顺序。但是我还无法找到它。
xsonic 2012年

现在这是正确的答案吗?如果是这样,请将其标记为解决方案。复选标记位于投票箭头的正下方。如果没有,请添加您自己的答案并说明为解决该问题而采取的步骤。谢谢。
kaiser 2012年

奥托已经发布了正确的答案(我接受了)。give a priority value to the controls,我认为不需要进一步解释;-)
xsonic 2012年

绝对同意:)
kaiser 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.