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


10

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

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

または誰かがこれを解決する方法を知っていますか?


確かに、「cusomizer」とつづられているのですか?;)
カイザー

1
thx ...固定= D
xsonic

回答:


9

それらを特定の順序で必要とする場合は、コントロールに優先値を与えます。そうでない場合、それらの順序は定義されず、保証されません。

優先度を定義しない場合、コントロールはデフォルトの優先度「10」を取得します。

2つのコントロールの優先度が同じ場合、結果の順序は未定義です。これがPHPの動作方法です。


2
ああ、それは簡単です。優先度の値がコントロールでも機能することを知りませんでした。どうもありがとう!
xsonic

1

掃除

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

»これを追加した後はどうなりますか?«

したがって、クリーンアップから始めて、それがどのように追加されるを確認てください。

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ソートメカニズムで回避できます。出力を見て、単純な配列ソートで何ができるかを見てください(ヒント:キャスト(array) $object とを簡単に入力できます(object) $array


ご協力いただきありがとうございます。この時点で、すべてが正しい順序になっています。注文はコアクラスのどこかで混合されなければならないと思います。しかし、私はそれをまだ追跡することができませんでした。
xsonic

これは正しい答えですか?その場合は、ソリューションとしてマークしてください。チェックマークは投票矢印のすぐ下にあります。そうでない場合は、独自の答えを追加し、それを回避するために取った手順を説明してください。ありがとう。
カイザー2012

オットーはすでに正しい答えを投稿しました(私はそれを受け入れました)。give a priority value to the controls、それ以上の説明は必要ないと思います;-)
xsonic

絶対に同意します:)
カイザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.