Cum să transmiți valoarea unei setări în alt control în WordPress Customizer pentru actualizare live a opțiunilor dropdown
În scriptul WordPress Customizer, încerc să transmit valoarea dintr-un control de tip select într-un control custom care afișează taxonomiile asociate cu valoarea selectată (primul control).
$wp_customize->add_control( new Tax_Dropdown_Control( $wp_customize, 'select_tax', array(
'section' => 'section_1',
'label' => __( 'Selectează Taxonomia Postării', 'textdomain' ),
'description' => __( 'Selectează o taxonomie bazată pe tipul de postare selectat.', 'textdomain' ),
'dropdown_args' => array(
'post_type' => $wp_customize->get_setting("select_post_type"), // aici trebuie să transmit valoarea primei setări
),
) ) );
// fragment de cod pentru controlere custom
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>';
}
....
}
Este necesar să actualizez opțiunile live când tipul de postare selectat este schimbat. Nu sunt sigur dacă poate fi folosit un active_callback
pentru a rechema funcția cu variabila actualizată?

Probabil ai putea folosi niște JavaScript pentru a captura opțiunea selectată și apoi să faci un apel Ajax către REST API pentru a prelua postările corespunzătoare și a actualiza al doilea câmp.

Customizer-ul face totul pe partea de client, deci obținerea unei noi liste de taxonomii ar implica un apel ajax către API-ul REST. Acest lucru este realizabil, dar destul de complicat. O soluție mai ușoară, dar mai puțin elegantă ar fi să includeți pur și simplu toate meniurile drop-down și să comutați afișarea acestora. Deci, ați avea acest cod în interiorul unei bucle prin toate meniurile drop-down posibile:
foreach [ meniu drop-down posibil ] {
....
if ($taxonomii) {
echo '<select id="' . $taxonomii . '">';
foreach ($taxonomii as $taxonomie ) {
echo '<option>'. $taxonomie. '</option>';
}
echo '</select>';
}
}
Acest lucru va duce la un html
de genul:
<select id="tax1">
<option>...</option>
<option>...</option>
</select>
...
<select id="tax5">
<option>...</option>
<option>...</option>
</select>
Apoi, puteți folosi id
-ul de pe select
pentru a aplica CSS pentru a comuta afișarea. Evident, nu doriți acest html
urât pe site-ul dvs. live, așa că va trebui să utilizați is_customize_preview
pentru a vă asigura că acesta este generat doar atunci când customizer-ul este activ.
