Personalizzazione del tema: ordine delle impostazioni


10

Se aggiungo più di 5 impostazioni a una singola sezione, l'ordine delle impostazioni diventa strano.

Per esempio:

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

Ulteriori esempi in un pastebin - nessun tempo di scadenza

I colori sono numerati da 1 a 7, ma nelle impostazioni appaiono in questo ordine: 2,1,3,4,6,5,7

Qualcuno ha provato lo stesso?

O qualcuno sa come risolverlo?


Certo, è scritto "cusomizer"? ;)
Kaiser

1
thx ... fixed = D
xsonic

Risposte:


9

Se ne hai bisogno in un ordine specifico, dai un valore di priorità ai controlli. Altrimenti, il loro ordine non è definito e non può essere garantito.

Se non si definisce una priorità, il controllo ottiene la priorità predefinita di "10".

Quando due controlli hanno la stessa priorità, l'ordine risultante non è definito, perché funziona così PHP .


2
oh mio ... CHE semplice. Non sapevo che il valore di priorità funzionasse anche sui controlli. Molte grazie!
xsonic,

1

Pulire

L'iterazione è molto più semplice per il debug, poiché vedrai informazioni dettagliate:

»Cosa succede dopo aver aggiunto questo a quello?«

Quindi basta iniziare con una pulizia e vedere come viene aggiunto.

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

Ordinamento

La possibilità è piuttosto alta, che ti aggiri con meccanismi di ordinamento php predefiniti . Dai un'occhiata all'output e poi vedi cosa puoi fare con un semplice ordinamento dell'array (Suggerimento: puoi facilmente digitare cast (array) $object e (object) $array.


Grazie per l'aiuto. A questo punto è tutto nel giusto ordine. Credo che l'ordine debba essere mischiato ovunque nelle classi principali. Ma non sono ancora riuscito a rintracciarlo.
xsonic,

Questa è ora la risposta giusta? In tal caso, contrassegnalo come soluzione. Il segno di spunta si trova proprio sotto le frecce di voto. In caso contrario, aggiungi la tua risposta e spiega i passaggi che hai preso per aggirarla. Grazie.
Kaiser

Otto ha già pubblicato la risposta giusta (che ho accettato). give a priority value to the controls, Penso che non siano necessarie ulteriori spiegazioni ;-)
xsonic

Assolutamente d'accordo :)
Kaiser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.