it-swarm.com.ru

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

Если я добавлю более 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

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

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

10
xsonic

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

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

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

9
Otto

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).

1
kaiser