Настройка темы - порядок настроек

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'
) ) );

Дальнейшие примеры в пастбине - нет срока годности

Цвета пронумерованы от 1 до 7, но в настройках они отображаются в следующем порядке: 2,1,3,4,6,5,7

Кто-нибудь испытывал то же самое?

Или кто-нибудь вообще знает, как это решить?

xsonic
источник
Уверен, что это пишется как "cusomizer"? ;)
Кайзер
1
спасибо ... исправлено = D
xsonic

Ответы:

9

Если они вам нужны в определенном порядке, присвойте элементам управления значение приоритета. В противном случае их порядок не определен и не может быть гарантирован.

Если вы не определили приоритет, элемент управления получает приоритет по умолчанию «10».

Когда два элемента управления имеют одинаковый приоритет, результирующий порядок не определен, потому что именно так работает PHP .

эфирное масло
источник
2
о мой ... это просто. Не знал, что значение приоритета работает и для элементов управления. Большое спасибо!
xsonic
1

CleanUp

Итерирование намного проще для отладки, так как вы увидите пошаговую информацию:

»Что будет после того, как я добавлю это к этому?«

Так что просто начните с очистки и посмотрите, как это добавляется.

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
Теперь это правильный ответ? Если так, пожалуйста отметьте это как решение. Галочка находится прямо под стрелками для голосования. Если нет, то, пожалуйста, добавьте свой собственный ответ и объясните шаги, которые вы предприняли, чтобы обойти его. Спасибо.
Кайзер
Отто уже выложил правильный ответ (который я принял). give a priority value to the controlsЯ думаю, что дальнейшее объяснение не требуется ;-)
xsonic
Абсолютно согласен :)
Кайзер