WordPress Customizer - Passare il valore di un'impostazione in un altro controllo per aggiornare dinamicamente le scelte a discesa
Nello script del Customizer di WordPress, sto cercando di passare il valore da un controllo di selezione a un controllo personalizzato che mostra le tassonomie associate al valore selezionato (primo controllo).
$wp_customize->add_control( new Tax_Dropdown_Control( $wp_customize, 'select_tax', array(
'section' => 'section_1',
'label' => __( 'Seleziona Tassonomia Articolo', 'textdomain' ),
'description' => __( 'Seleziona una tassonomia basata sul tipo di articolo selezionato.', 'textdomain' ),
'dropdown_args' => array(
'post_type' => $wp_customize->get_setting("select_post_type"), // qui devo passare il valore della prima impostazione
),
) ) );
// snippet relativo ai controlli personalizzati
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>';
}
....
}
Dovrebbe aggiornare le scelte in tempo reale quando viene cambiato il tipo di articolo selezionato. Non sono sicuro se forse un active_callback
possa essere usato per richiamare la funzione con la variabile aggiornata?

Potresti probabilmente usare un po' di JavaScript per catturare l'opzione selezionata e poi fare una chiamata Ajax all'API REST per recuperare i post corrispondenti e aggiornare il secondo campo.

Il personalizzatore funziona tutto lato client, quindi recuperare una nuova lista di tassonomie richiederebbe una chiamata ajax all'API REST. È fattibile, ma piuttosto complicato. Una soluzione più semplice, anche se meno elegante, sarebbe quella di includere semplicemente tutti i menu a discesa e alternarne la visualizzazione. Quindi avresti questo all'interno di un ciclo attraverso tutti i menu a discesa pensabili:
foreach [ menu a discesa pensabile ] {
....
if ($taxonomies) {
echo '<select id="' . $taxonomies . '">';
foreach ($taxonomies as $taxonomy ) {
echo '<option>'. $taxonomy. '</option>';
}
echo '</select>';
}
}
Questo porterà a un html
come questo:
<select id="tax1">
<option>...</option>
<option>...</option>
</select>
...
<select id="tax5">
<option>...</option>
<option>...</option>
</select>
Successivamente, puoi utilizzare l'id
su select
per applicare il css e alternare la visualizzazione. Ovviamente non vorrai questo brutto html
sul tuo sito live, quindi dovrai usare is_customize_preview
per assicurarti che venga generato solo quando il personalizzatore è attivo.
