Personalizador de temas: cómo crear un panel de múltiples niveles

4

¿Hay alguna forma de crear un subpanel de nivel profundo en el Personalizador de temas (como raíces de plantas)? Mi tema que he estado desarrollando parece ser más complicado. Creo que si podemos crear un subpanel de nivel profundo, nuestra página de personalización no se verá desordenada, nuestro usuario personalizará nuestro tema más fácilmente y podremos simplificar mucho más el tema de WordPress. Las imágenes a continuación describen cuál es mi idea ...

Desafortunadamente,heintentadobuscareste,perosolopudeencontrarunamaneradecrearunPaneldeunsolonivelenelPersonalizadordeTemasaquíesloqueencontréen otro hilo , no pudo encontrar una manera de profundizar en el sub Panel. ¿Podrías por favor poner algo de luz en mi vida?

Actualizar : el siguiente código es un código que uso para crear un Panel y Control como la imagen # 1, que es un Panel de un solo nivel. todos funcionan bien.

$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',
                )
            );

Mi problema es que quiero crear un nuevo panel y dejar que se adhieran a otro panel que haga que parezca una jerarquía de raíces (imagen # 2) Creo que si podemos hacer algo así, podremos Hacer el personalizador de temas mucho más potente. Luego traté de lograr esa idea y traté de volver a escribir mi código. Desafortunadamente, no funcionó. Por favor revisa el siguiente.

$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',
                )
            );

¿Podría darme la solución? No puedo imaginar cómo hacer que el panel parezca una jerarquía de raíces. Cualquier ayuda sería apreciada :)

    
pregunta Pakpoom Tiwakornkit 23.08.2015 - 08:09

2 respuestas

3

Para cualquiera que venga aquí en busca de esto, pude hacerlo después de luchar con él durante unas horas.

El código es un poco extenso, por lo que no quise publicar aquí (los mods pueden dejarme ahora si eso es mejor), en lugar de eso, creé una gist: enlace

Lo que hace es que básicamente te permite especificar la propiedad panel en los paneles (para paneles de anidación debajo de los paneles) y la propiedad section en las secciones (para las secciones de anidación en las secciones).

Notas:

  • El código php incluye un ejemplo de cómo crear Paneles / subpaneles / secciones / subsecciones. Vale la pena señalar que usted instanciar nuevos paneles / secciones usando la subclase que creé, en lugar de eso de llamar directamente a $wp-customize->add_panel y pasarle un matriz de configuración.
  • No es necesario modificar los archivos JS y CSS. Si se preguntaba por qué se necesita CSS, está ahí para arreglar la animación al pasar de los paneles a los paneles secundarios y las secciones a las secciones secundarias.
  • Al crear subsecciones, asegúrese de agregar también una propiedad panel que debería ser igual a panel de la sección primaria

Traté de hacer esto con el menor código posible, y sin anular nada que pudiera arruinar el código de otras personas. Es posible que se necesite algo de refactorización si cambian la lógica en las futuras versiones, lo hice tan seguro como pude.

    
respondido por el OriginalEXE 11.02.2017 - 17:50
2

En este momento, simplemente no es posible tener más de paneles, secciones y controles. La expansión de este sistema requeriría una programación extensa en WP. Dado el tamaño estrecho del personalizador, también podría perderse fácilmente si tiene tantos paneles anidados. Así que probablemente tampoco sea deseable.

    
respondido por el cjbj 16.05.2016 - 18:52

Lea otras preguntas en las etiquetas