Personalizador de temas - ordem das configurações

10

Se eu adicionar mais de 5 configurações a uma única seção, a ordem das configurações ficará 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 elas aparecem nessa ordem: 2,1,3,4,6,5,7

Alguém já experimentou o mesmo?

Ou alguém sabe como resolver isso?

xsonic
fonte
Claro, que está escrito "cusomizer"? ;)
kaiser
11
thx ... fixado = D
xsonic

Respostas:

9

Se você precisar deles em uma ordem específica, atribua um valor de prioridade aos controles. Caso contrário, seu pedido não será definido e não poderá ser garantido.

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

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

Otto
fonte
2
oh meu ... TÃO simples. Não sabia que o valor da prioridade também funciona nos controles. Muito obrigado!
xsonic
1

Limpar

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

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

Então, basta começar com uma limpeza e ver como ela é 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>';
}

Ordenação

A chance é bastante alta, de que você contornará isso com mecanismos padrão de classificação de php . Basta dar uma olhada na saída e ver o que você pode fazer com a simples classificação de arrays (Dica: você pode facilmente digitar cast (array) $object e (object) $array.

kaiser
fonte
Obrigado pela ajuda. Neste ponto, está tudo na ordem certa. O pedido deve ser misturado em qualquer lugar das classes principais, eu acho. Mas ainda não consegui descobrir.
xsonic
Esta é agora a resposta certa? Em caso afirmativo, marque-o como solução. A marca de seleção está logo abaixo das setas de votação. Caso contrário, adicione sua própria resposta e explique as etapas que você tomou para contorná-la. Obrigado.
kaiser
Otto já postou a resposta certa (que eu aceitei). give a priority value to the controls, Acho que nenhuma explicação é necessária ;-)
xsonic
Concordo absolutamente :)
kaiser