WordPress Customizer - Passare il valore di un'impostazione in un altro controllo per aggiornare dinamicamente le scelte a discesa

24 ago 2020, 21:28:57
Visualizzazioni: 362
Voti: 1

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?

2
Commenti

Come si aggiunge il controllo select_post_type? Qual è il codice? E quei echo ($taxonomies), in quale controllo/sezione si trovano o per cosa servono?

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

@SallyCJ il select_post_type è un controllo di tipo select. Il $taxonomies è il codice per la classe del controllo personalizzato select_tax nella funzione di rendering del contenuto

730wavy 730wavy
25 ago 2020 04:53:07
Tutte le risposte alla domanda 2
0

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.

4 ott 2020 23:37:22
0

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.

5 ott 2020 12:21:40