Theme Customizer - Reihenfolge der Einstellungen

10

Wenn ich einem einzelnen Abschnitt mehr als 5 Einstellungen hinzufüge, wird die Reihenfolge der Einstellungen merkwürdig.

Beispielsweise:

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

Weitere Beispiele in einem Pastebin - keine Verfallszeit

Die Farben sind von 1 bis 7 nummeriert, aber in den Einstellungen erscheinen sie in der folgenden Reihenfolge: 2,1,3,4,6,5,7

Hat jemand das gleiche erlebt?

Oder weiß überhaupt jemand, wie man das löst?

xsonic
quelle
Sicher, dass es "Cusomizer" geschrieben ist? ;)
Kaiser
1
thx ... fixed = D
xsonic

Antworten:

9

Wenn Sie sie in einer bestimmten Reihenfolge benötigen, geben Sie den Steuerelementen einen Prioritätswert. Andernfalls ist ihre Reihenfolge nicht definiert und kann nicht garantiert werden.

Wenn Sie keine Priorität definieren, erhält das Steuerelement die Standardpriorität "10".

Wenn zwei Steuerelemente dieselbe Priorität haben, ist die resultierende Reihenfolge undefiniert, da PHP so funktioniert .

Otto
quelle
2
oh mein ... DAS ist einfach. Wusste nicht, dass der Prioritätswert auch für Steuerelemente funktioniert. Danke vielmals!
Xsonic
1

Aufräumen

Das Iterieren ist für das Debuggen viel einfacher, da Sie schrittweise Informationen sehen:

»Was passiert, nachdem ich das hinzugefügt habe?«

Beginnen Sie also einfach mit einer Bereinigung und sehen Sie, wie sie hinzugefügt wird.

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

Sortierung

Die Chance ist ziemlich hoch, dass Sie es mit Standard-PHP-Sortiermechanismen umgehen . Schauen Sie sich einfach die Ausgabe an und sehen Sie, was Sie mit der einfachen Array-Sortierung tun können (Hinweis: Sie können cast (array) $object und einfach eingeben (object) $array.

Kaiser
quelle
Danke für Ihre Hilfe. An diesem Punkt ist alles in der richtigen Reihenfolge. Die Reihenfolge muss irgendwo in den Kernklassen gemischt werden, denke ich. Aber ich konnte es noch nicht finden.
Xsonic
Ist das jetzt die richtige Antwort? Wenn ja, markieren Sie es bitte als Lösung. Das Häkchen befindet sich direkt unter den Abstimmungspfeilen. Wenn nicht, fügen Sie bitte Ihre eigene Antwort hinzu und erläutern Sie die Schritte, die Sie unternommen haben, um das Problem zu umgehen. Vielen Dank.
Kaiser
Otto hat bereits die richtige Antwort gepostet (die ich akzeptiert habe). give a priority value to the controlsIch denke, es ist keine weitere Erklärung erforderlich ;-)
Xsonic
Stimme absolut zu :)
kaiser