WordPress Customizer - pasar valor de configuración a otro control para actualizar opciones desplegables en vivo

24 ago 2020, 21:28:57
Vistas: 362
Votos: 1

En el script del personalizador de WordPress, estoy intentando pasar el valor de un control de selección a un control personalizado que muestra las taxonomías asociadas al valor seleccionado (primer control).

$wp_customize->add_control( new Tax_Dropdown_Control( $wp_customize, 'select_tax', array(
    'section'       => 'section_1',
    'label'         => __( 'Seleccionar Taxonomía del Post', 'textdomain' ),
    'description'   => __( 'Selecciona una taxonomía basada en el tipo de post elegido.', 'textdomain' ),
    'dropdown_args' => array(
        'post_type' => $wp_customize->get_setting("select_post_type"), // aquí necesito pasar el valor del primer ajuste
    ),
) ) );

// fragmento relacionado con controles personalizados
class Tax_Dropdown_Control extends WP_Customize_Control {
    .....    
    $dropdown_args = wp_parse_args( $this->dropdown_args, array(
        'post_type' => 'post',
    ) );
        
    $dropdown_args['echo'] = false;
                
    $taxonomies = get_object_taxonomies($dropdown_args);
                
    if  ($taxonomies) {
        echo '<select>';
        foreach ($taxonomies  as $taxonomy ) {
            echo '<option>'. $taxonomy. '</option>';
        }
        echo '</select>';
    } 
    ....
}

Necesitaría actualizar las opciones en vivo cuando se cambie el tipo de post seleccionado. No estoy seguro si tal vez se podría usar un active_callback para volver a llamar a la función con la variable actualizada.

2
Comentarios

¿Cómo se añade el control select_post_type? ¿Cuál es el código? Y esos echo ($taxonomies), ¿en qué control/sección están?

Sally CJ Sally CJ
25 ago 2020 02:20:24

@SallyCJ el select_post_type es un control de selección. El $taxonomies es el código para la clase de control personalizado select_tax en la función de renderizado de contenido

730wavy 730wavy
25 ago 2020 04:53:07
Todas las respuestas a la pregunta 2
0

Probablemente podrías usar algo de JavaScript para capturar la opción seleccionada y luego hacer una llamada Ajax a la API REST para obtener las publicaciones correspondientes y actualizar el segundo campo.

4 oct 2020 23:37:22
0

El personalizador hace todo del lado del cliente, por lo que recuperar una nueva lista de taxonomías implicaría una llamada ajax a la API REST. Eso es factible, pero bastante complicado. Una solución más fácil, pero menos elegante, sería simplemente incluir todos los menús desplegables y alternar su visualización. Entonces tendrías esto dentro de un bucle a través de todos los menús desplegables posibles:

foreach [ menú desplegable posible ] {
....
if  ($taxonomies) {
    echo '<select id="' . $taxonomies . '">';
    foreach ($taxonomies  as $taxonomy ) {
        echo '<option>'. $taxonomy. '</option>';
        }
    echo '</select>';
    } 
}

Esto generará un html como este:

<select id="tax1">
 <option>...</option>
 <option>...</option>
</select>
...
<select id="tax5">
 <option>...</option>
 <option>...</option>
</select>

A continuación, puedes usar el id en select para aplicar css y alternar la visualización. Obviamente no querrás este html poco elegante en tu sitio en vivo, así que tendrás que usar is_customize_preview para asegurarte de que esto solo se genere cuando el personalizador esté activo.

5 oct 2020 12:21:40