Cum să transmiți valoarea unei setări în alt control în WordPress Customizer pentru actualizare live a opțiunilor dropdown

24 aug. 2020, 21:28:57
Vizualizări: 362
Voturi: 1

Î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ă?

2
Comentarii

Cum adaugi controlul select_post_type? Care este codul? Și acele echo ($taxonomies), pentru/in ce control/secțiune sunt?

Sally CJ Sally CJ
25 aug. 2020 02:20:24

@SallyCJ select_post_type este un control de tip select. $taxonomies este codul pentru clasa de control personalizat select_tax în funcția de renderizare a conținutului

730wavy 730wavy
25 aug. 2020 04:53:07
Toate răspunsurile la întrebare 2
0

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.

4 oct. 2020 23:37:22
0

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.

5 oct. 2020 12:21:40