Penyesuai tema - pesanan pengaturan

10

Jika saya menambahkan lebih dari 5 Pengaturan ke satu bagian, urutan pengaturan menjadi aneh.

Sebagai contoh:

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

Contoh lebih lanjut di masa lalu - tidak ada waktu kedaluwarsa

Warnanya dinomori dari 1 hingga 7, tetapi dalam pengaturan mereka muncul dalam urutan itu: 2,1,3,4,6,5,7

Adakah yang mengalami hal yang sama?

Atau adakah yang tahu cara mengatasi ini?

xsonic
sumber
Tentu, itu dieja "cusomizer"? ;)
kaiser
1
thx ... fix = D
xsonic

Jawaban:

9

Jika Anda membutuhkannya dalam urutan tertentu, maka berikan nilai prioritas untuk kontrol. Kalau tidak, pesanan mereka tidak ditentukan dan tidak dapat dijamin.

Jika Anda tidak menetapkan prioritas, maka kontrol mendapatkan prioritas default "10".

Ketika dua kontrol memiliki prioritas yang sama, maka urutan yang dihasilkan tidak terdefinisi, karena itulah cara kerja PHP .

Otto
sumber
2
oh ... sederhana saja. Tidak tahu nilai prioritas juga berfungsi pada kontrol. Terima kasih banyak!
xsonic
1

Membersihkan

Iterasi jauh lebih mudah untuk debugging, karena Anda akan melihat informasi langkah demi langkah:

»Apa yang terjadi, setelah saya menambahkan ini ke itu?«

Jadi cukup mulai dengan pembersihan dan lihat bagaimana itu ditambahkan.

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

Penyortiran

Peluangnya cukup tinggi, bahwa Anda akan mengatasinya dengan mekanisme penyortiran php default . Lihatlah output dan kemudian lihat apa yang dapat Anda lakukan dengan pengurutan array sederhana (Petunjuk: Anda dapat dengan mudah mengetikkan cast (array) $object dan (object) $array.

kaisar
sumber
Terima kasih atas bantuan Anda. Pada titik ini semuanya dalam urutan yang benar. Perintahnya harus dicampur di mana saja di kelas inti, saya pikir. Tapi saya belum bisa melacaknya.
xsonic
Apakah ini jawaban yang tepat? Jika demikian, harap tandai sebagai solusi. Tanda centang tepat di bawah panah pemungutan suara. Jika tidak, silakan tambahkan jawaban Anda sendiri dan jelaskan langkah-langkah yang telah Anda ambil untuk mengatasinya. Terima kasih.
kaiser
Otto sudah memposting jawaban yang benar (yang saya terima). give a priority value to the controls, Saya pikir tidak ada penjelasan lebih lanjut diperlukan ;-)
xsonic
Sepenuhnya setuju :)
kaiser