Customizador de temas - ordem de configurações

10

Se eu adicionar mais de 5 configurações a uma única seção, a ordem das configurações será estranha.

Por exemplo:

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

Outros exemplos em um pastebin - sem tempo de expiração

As cores são numeradas de 1 a 7, mas nas configurações aparecem nessa ordem: 2,1,3,4,6,5,7

Alguém já experimentou o mesmo?

Ou alguém sabe como resolver isso?

    
por xsonic 09.08.2012 / 14:32

2 respostas

8

Se você precisar deles em uma ordem específica, forneça um valor de prioridade aos controles. Caso contrário, sua ordem não está definida e não pode ser garantida.

Se você não definir uma prioridade, o controle receberá a prioridade padrão de "10".

Quando dois controles têm a mesma prioridade, a ordem resultante é indefinida, porque é como o PHP funciona .

    
por Otto 09.08.2012 / 15:46
1

CleanUp

A iteração é muito mais fácil para a depuração, pois você verá informações passo a passo:

  

»O que acontece, depois que eu adicionei isso a isso?«

Então, comece com uma limpeza e veja como é adicionada.

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

Classificando

A chance é bem alta, que você pode contorná-la com mecanismos padrão de ordenação php . Basta dar uma olhada na saída e ver o que você pode fazer com a ordenação simples de matriz (Dica: você pode facilmente digitar cast (array) $object e (object) $array .

    
por kaiser 09.08.2012 / 15:17