Dostosowywanie motywu - kolejność ustawień

10

Jeśli dodam więcej niż 5 ustawień do jednej sekcji, kolejność ustawień staje się dziwna.

Na przykład:

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

Dalsze przykłady w koszyku - bez daty ważności

Kolory są ponumerowane od 1 do 7, ale w ustawieniach pojawiają się w następującej kolejności: 2,1,3,4,6,5,7

Czy ktoś doświadczył tego samego?

Czy ktoś w ogóle wie, jak to rozwiązać?

Xsonic
źródło
Pewnie, że jest to „Cusomizer”? ;)
Kaiser
1
dzięki ... naprawiono = D
xsonic

Odpowiedzi:

9

Jeśli potrzebujesz ich w określonej kolejności, podaj priorytet wartości kontrolkom. W przeciwnym razie ich kolejność nie jest zdefiniowana i nie może być zagwarantowana.

Jeśli nie zdefiniujesz priorytetu, wówczas kontrolka otrzymuje domyślny priorytet „10”.

Gdy dwa formanty mają taki sam priorytet, wynikowa kolejność jest niezdefiniowana, ponieważ tak działa PHP .

Otto
źródło
2
o mój ... To proste. Nie wiedziałem też, że wartość priorytetu działa również na kontrolkach. Wielkie dzięki!
xsonic,
1

Sprzątać

Iterowanie jest znacznie łatwiejsze do debugowania, ponieważ zobaczysz informacje krok po kroku:

»Co się stanie po dodaniu do tego?«

Po prostu zacznij od posprzątania i zobacz, jak to się doda.

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

Sortowanie

Szanse są dość duże, że obejdziesz to dzięki domyślnym mechanizmom sortowania php . Wystarczy spojrzeć na dane wyjściowe i przekonać się, co można zrobić za pomocą prostego sortowania tablic (Wskazówka: można łatwo wpisać rzut (array) $object i (object) $array.

kajzer
źródło
Dzięki za pomoc. W tym momencie wszystko jest w odpowiedniej kolejności. Myślę, że porządek musi się mieszać w dowolnym miejscu w podstawowych klasach. Ale nie mogłem tego jeszcze wyśledzić.
xsonic,
Czy to teraz właściwa odpowiedź? Jeśli tak, zaznacz to jako rozwiązanie. Znacznik wyboru znajduje się bezpośrednio pod strzałkami do głosowania. Jeśli nie, dodaj własną odpowiedź i wyjaśnij kroki, które wykonałeś, aby ją obejść. Dzięki.
Kaiser
Otto opublikował już prawidłową odpowiedź (którą zaakceptowałem). give a priority value to the controls, Myślę, że dalsze wyjaśnienia nie są potrzebne ;-)
Xsonic
Absolutnie się zgadzam :)
Kaiser