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ć?


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 .


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.