web-dev-qa-db-ja.com

テーマカスタマイザ:マルチレベルパネルの作り方

テーマカスタマイザで(植物の根のように)深いレベルのサブパネルを作成する方法はありますか?私が開発してきたという私のテーマはもっと複雑そうです。深いレベルのサブパネルを作成できれば、カスタマイザページがめちゃくちゃに見えなくなり、ユーザーがテーマを簡単にカスタマイズできるようになり、さらに複雑なWordPressテーマを簡単に作成できるようになるでしょう。下の画像は私の考えが何であるかを説明しています...

Theme Customizer concept that I found on online tutorialsHere is sub panel that I wan to create

残念ながら、私はこれについて検索しようとしましたが、テーマカスタマイザでシングルレベルパネルを作成する方法を見つけることしかできませんでした 別のスレッド 作る方法を見つけることができませんでしたサブパネルをより深くします。あなたは私の生活の中でいくつかの光を遮断してもらえますか?

更新 :次のコードは、私がPanelとControlを作成するために使用する、#1レベルのPanelであるimage#1のようなコードです。それらはすべてうまくいきます。

$wp_customize->add_panel('panel1',
        array(
            'title' => 'Panel 1',
            'priority' => 1,
            )
        );
        $wp_customize->add_section( 'section1',
            array(
                'title' => 'This is section 1',
                'priority' => 1,
                'panel' => 'panel1'
                )
            );
            $wp_customize->add_setting('field1', array('default' => 'default text'));
            $wp_customize->add_control('field1', array(
                'label' => 'Text field',
                'section' => 'section1',
                'type' => 'text',
                )
            );

私の問題は、私が新しいパネルを作成し、それをルート階層のように見えるようにする別のパネルに固定させたいということです(画像#2)。強力なテーマカスタマイザ。私はそれからその考えを達成することを試み、私のコードを書き直すことを試みた。残念ながら、うまくいきませんでした。下記を確認してください。

$wp_customize->add_panel('panel1',
        array(
            'title' => 'Panel 1',
            'priority' => 1,
            )
        );
        $wp_customize->add_section( 'section1',
            array(
                'title' => 'This is section 1',
                'priority' => 1,
                'panel' => 'panel1'
                )
            );
            $wp_customize->add_setting('field1', array('default' => 'default text'));
            $wp_customize->add_control('field1', array(
                'label' => 'Text field',
                'section' => 'section1',
                'type' => 'text',
                )
            );
        // I used the code below with a little hope that it will help me accomplish my idea, but it didn't work T^T.
        $wp_customize->add_panel('panel1_1',
            array(
                'title' => 'Panel 1.1',
                'priority' => 2,
                'panel' => 'panel1' // I tried adding this line of code in order to let it depend on another panel
                )
            );
            $wp_customize->add_section( 'section1_1',
            array(
                'title' => 'This is section 1',
                'priority' => 1,
                'panel' => 'panel1_1'
                )
            );
            $wp_customize->add_setting('field1_1', array('default' => 'default text'));
            $wp_customize->add_control('field1_1', array(
                'label' => 'Text field',
                'section' => 'section1_1',
                'type' => 'text',
                )
            );

解決策を教えてください。パネルをルート階層のようにする方法を理解できません。どんな助けでも感謝されるでしょう:)

4

これを探してここに来る誰にとっても、私は数時間それと戦った後それをすることができました。

コードは少々広大なので、ここに投稿したくはありませんでした(もしmodがもっと良いのであれば気軽に今すぐ聞かせてください)、代わりにGistを作成しました: https://Gist.github.com/OriginalEXE/ 9a6183e09f4cae2f30b006232bb154af

基本的に、パネルにpanelプロパティ(パネルの下にパネルをネストする場合)とセクションにsectionプロパティ(セクションの下にセクションをネストする場合)を指定できます。

ノート:

  • Phpコードはパネル/サブパネル/セクション/サブセクションを作成する方法の例を含みます。 $wp-customize->add_panelを直接呼び出して構成配列を渡すのではなく、作成したサブクラスを使用して新しいパネル/セクションをインスタンス化することは注目に値します。
  • JSファイルとCSSファイルは変更する必要はありません。なぜCSSが必要なのか疑問に思ったのであれば、パネルからサブパネルへ、そしてセクションからサブセクションへ移行するときのアニメーションを修正するためにあります。
  • サブセクションを作成するときは、必ず親セクションのpanelと同じでなければならないpanelプロパティも追加してください。

私はできるだけ少ないコードでこれをやろうとしました、そして、他の人々のコードとめちゃくちゃになるかもしれない何かを無効にしないで。将来のバージョンでロジックが変更された場合は、ある程度のリファクタリングが必要になる可能性があります。私はできる限り将来的に見直しました。

3
OriginalEXE

現時点では、パネル、セクション、およびコントロール以上のものを持つことは不可能です。このシステムを拡張するには、WPで大規模なプログラミングが必要になります。カスタマイザのサイズが狭いため、入れ子になったパネルが非常に多い場合は、簡単に迷子になる可能性があります。だからそれはおそらく望ましくもないです。

2
cjbj