web-dev-qa-db-ja.com

テーマカスタマイザ - 設定順

1つのセクションに5つ以上の設定を追加すると、設定の順序がおかしくなります。

例えば:

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

ペーストビンの例 - 有効期限なし

色には1から7までの番号が付けられていますが、設定では2,1,3,4,6,5,7の順に表示されます。

誰かが同じことを経験したことがありますか?

それともこれを解決する方法を誰かが知っていますか?

10
xsonic

特定の順序でそれらが必要な場合は、コントロールに優先順位の値を付けます。そうでなければ、それらの順序は定義されておらず、保証されません。

優先順位を定義しないと、コントロールはデフォルトの優先順位 "10"を取得します。

2つのコントロールが同じ優先順位を持つ場合、結果の順序は未定義になります。これは how PHPの動作 であるためです。

9
Otto

掃除

ステップバイステップの情報が表示されるので、反復はデバッグがはるかに簡単です。

"これを追加した後、どうなりますか?"

そのため、単純にクリーンアップから始めて、 how を参照してください。

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

ソート

可能性はかなり高いです、あなたは デフォルトのphpソートメカニズム でそれを回避するでしょう。出力を見て、単純な配列の並べ替えで何ができるかを確認してください(ヒント:cast (array) $object(object) $arrayを簡単に入力できます。

1
kaiser