Тематичний налаштування - порядок налаштувань


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

Хтось переживав те саме?

Або хтось навіть знає, як це вирішити?


Впевнений, що в ньому написано "кузомайзер"? ;)
кайзер

1
thx ... фіксований = D
xsonic

Відповіді:


9

Якщо вони потрібні вам у певному порядку, то надайте елементам управління пріоритетне значення. В іншому випадку їх порядок не визначений і не може бути гарантований.

Якщо ви не визначаєте пріоритет, то керування отримує пріоритет за замовчуванням "10".

Коли два елементи керування мають однаковий пріоритет, отриманий порядок не визначений, тому що так працює PHP .


2
о мій ... ТЕ просто. Не знав, що значення пріоритету працює і для елементів керування. Дуже дякую!
xsonic

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

Це тепер правильна відповідь? Якщо так, будь ласка, позначте це як рішення. Галочка знаходиться прямо під стрілками для голосування. Якщо ні, то, будь ласка, додайте власну відповідь та поясніть кроки, які ви вжили, щоб її обійти. Дякую.
кайзер

Отто вже розмістив правильну відповідь (яку я прийняв). give a priority value to the controls, Я думаю, не потрібно більше пояснень ;-)
xsonic

Абсолютно згідний :)
кайзер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.