Personalizador de temas - orden de configuración

10

Si agrego más de 5 configuraciones a una sola sección, el orden de las configuraciones se vuelve extraño.

Por ejemplo:

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

Otros ejemplos en un pastebin: sin tiempo de caducidad

Los colores están numerados del 1 al 7, pero en la configuración aparecen en ese orden: 2,1,3,4,6,5,7

¿Alguien ha experimentado lo mismo?

¿O alguien sabe cómo resolver esto?

xsonic
fuente
Claro, que se deletrea "cusomizer"? ;)
kaiser
1
gracias ... arreglado = D
xsonic

Respuestas:

9

Si los necesita en un orden específico, asigne un valor de prioridad a los controles. De lo contrario, su orden no está definida y no se puede garantizar.

Si no define una prioridad, el control obtiene la prioridad predeterminada de "10".

Cuando dos controles tienen la misma prioridad, el orden resultante no está definido, porque así es como funciona PHP .

Otón
fuente
2
oh mi ... así de simple. No sabía que el valor de prioridad también funciona en los controles. ¡Muchas gracias!
xsonic
1

Limpiar

La iteración es mucho más fácil para la depuración, ya que verá información paso a paso:

"¿Qué sucede después de agregar esto a eso?"

Así que simplemente comience con una limpieza y vea cómo se agrega.

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

Clasificación

La posibilidad es bastante alta, que lo evitará con los mecanismos de clasificación de php predeterminados . Solo eche un vistazo a la salida y luego vea lo que puede hacer con una ordenación de matriz simple (Sugerencia: puede escribir fácilmente cast (array) $object y (object) $array.

emperador
fuente
Gracias por tu ayuda. En este punto, todo está en el orden correcto. El orden debe mezclarse en cualquier lugar de las clases principales, creo. Pero no pude localizarlo todavía.
xsonic
¿Es esta ahora la respuesta correcta? Si es así, márquelo como solución. La marca de verificación está justo debajo de las flechas de votación. Si no es así, agregue su propia respuesta y explique los pasos que ha tomado para solucionarlo. Gracias.
Kaiser
Otto ya publicó la respuesta correcta (que acepté). give a priority value to the controls, Creo que no se necesita más explicación ;-)
xsonic
Absolutamente de acuerdo :)
kaiser