web-dev-qa-db-fra.com

Personnalisation du thème - ordre des paramètres

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 une Pastebin - Pas de date 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 est-ce que quelqu'un sait même comment résoudre ce problème?

10
xsonic

Si vous en avez besoin dans un ordre spécifique, attribuez une valeur de priorité aux contrôles. Sinon, leur ordre n'est pas défini et ne peut ê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 est indéfini, car c'est comment PHP fonctionne .

9
Otto

Nettoyer

Itérer est beaucoup plus facile pour le débogage, car vous verrez des informations étape par étape:

"Que se passe-t-il après que j'ai ajouté ceci à cela?

Donc, commencez simplement par un nettoyage et voyez comment il s’ajoute.

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 pour 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 tri par tableau simple (Conseil: vous pouvez facilement taper cast (array) $object et (object) $array.

1
kaiser