Personnalisateur de thème - ordre des paramètres


10

Si j'ajoute plus de 5 paramètres à une seule section, l'ordre des paramètres devient bizarre.

Par exemple:

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

D'autres exemples dans une boîte à pâte - pas de délai d'expiration

Les couleurs sont numérotées de 1 à 7, mais dans les paramètres, elles apparaissent dans cet ordre: 2,1,3,4,6,5,7

Quelqu'un a-t-il vécu la même chose?

Ou est-ce que quelqu'un sait même comment résoudre ce problème?


Bien sûr, qu'il est orthographié "cusomizer"? ;)
kaiser

1
thx ... fixed = D
xsonic

Réponses:


9

Si vous en avez besoin dans un ordre spécifique, attribuez une valeur de priorité aux contrôles. Sinon, leur commande n'est pas définie et ne peut être garantie.

Si vous ne définissez pas de priorité, le contrôle obtient la priorité par défaut de "10".

Lorsque deux contrôles ont la même priorité, l'ordre résultant n'est pas défini, car c'est ainsi que PHP fonctionne .


2
oh mon ... si simple. Je ne savais pas que la valeur de priorité fonctionne également sur les commandes. Merci beaucoup!
xsonic

1

Nettoyer

L'itération est beaucoup plus facile pour le débogage, car vous verrez des informations étape par étape:

»Que se passe-t-il après avoir ajouté ceci à cela?«

Commencez donc simplement par un nettoyage et voyez comment il est ajouté.

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

Tri

Il y a de fortes chances que vous le contourniez avec les mécanismes de tri php par défaut . Jetez simplement un œil à la sortie et voyez ce que vous pouvez faire avec un simple tri de tableau (Astuce: vous pouvez facilement taper cast (array) $object et (object) $array.


Merci de votre aide. À ce stade, tout est dans le bon ordre. L'ordre doit être mélangé n'importe où dans les classes de base, je pense. Mais je ne pouvais pas encore le retrouver.
xsonic

Est-ce maintenant la bonne réponse? Si oui, veuillez le marquer comme solution. La coche est juste en dessous des flèches de vote. Sinon, veuillez ajouter votre propre réponse et expliquer les mesures que vous avez prises pour contourner ce problème. Merci.
kaiser

Otto a déjà posté la bonne réponse (que j'ai acceptée). give a priority value to the controls, Je pense qu'aucune autre explication n'est nécessaire ;-)
xsonic

Tout à fait d'accord :)
kaiser
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.