Personnalisateur de thèmes - Ordre des paramètres

10

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

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

Autres exemples dans un pastebin - pas d'expiration

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

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

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

    
posée xsonic 09.08.2012 - 14:32

2 réponses

8

Si vous en avez besoin dans un ordre spécifique, attribuez une valeur de priorité aux commandes. Sinon, leur ordre n’est pas défini et ne peut pas être garanti.

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 il s'agit de comment PHP fonctionne .

    
réponse donnée Otto 09.08.2012 - 15:46
1

Nettoyage

La 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 strongs chances que vous y arriviez avec les mécanismes de tri php par défaut . Jetez simplement un coup d’œil à la sortie et voyez ce que vous pouvez faire avec un simple tri de tableau (Conseil: vous pouvez facilement taper cast (array) $object et (object) $array .

    
réponse donnée kaiser 09.08.2012 - 15:17

Lire d'autres questions sur les étiquettes