WordPress Customizer - pasar valor de configuración a otro control para actualizar opciones desplegables en vivo
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.

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.

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.
