Contact Form 7 - Populează o listă de selecție cu taxonomie

27 sept. 2013, 19:19:42
Vizualizări: 13.9K
Voturi: 7

Cu Contact Form 7, este posibil să populezi o listă de selecție (dropdown) cu valori din Taxonomie Personalizată? Doresc ca utilizatorul să poată selecta categoria pe care dorește să o refere din Tipul meu de Postare Personalizată.

3
Comentarii

Mulțumesc pentru împărtășirea acestei soluții. Ar fi posibil să excludem unele categorii din lista drop-down cu codul tău?

user1690536 user1690536
4 mar. 2014 14:24:18

Cu siguranță. Poți folosi get_terms care are o mulțime de opțiuni sau chiar WP_Query

Howdy_McGee Howdy_McGee
4 mar. 2014 16:41:39

ei bine, sper ca oamenii de la stack overflow să nu ne alunge spunând că acest lucru este specific WordPress.

Nikhil VJ Nikhil VJ
11 feb. 2018 16:29:15
Toate răspunsurile la întrebare 1
1
11

Următorul cod este o metodă mai actualizată pentru a popula dinamic un select încorporat cu opțiuni și poate fi ușor extins pentru a suporta mai multe.

/**
 * Listă Select Dinamică pentru Contact Form 7
 * @utilizare [select nume taxonomy:{$taxonomy} ...]
 * 
 * @param Array $tag
 * 
 * @return Array $tag
 */
function lista_select_dinamic( $tag ) {

    // Rulează doar pe liste de selectare
    if( 'select' !== $tag['type'] && ('select*' !== $tag['type']) ) {
        return $tag;
    } else if ( empty( $tag['options'] ) ) {
        return $tag;
    }

    $term_args = array();

    // Parcurge opțiunile pentru a căuta opțiunile personalizate
    foreach( $tag['options'] as $option ) {

        $matches = explode( ':', $option );

        if( ! empty( $matches ) ) {

            switch( $matches[0] ) {

                case 'taxonomy':
                    $term_args['taxonomy'] = $matches[1];
                    break;

                case 'parent':
                    $term_args['parent'] = intval( $matches[1] );
                    break;

            }
        }

    }

    // Asigură-te că avem argumente de termeni cu care să lucrăm
    if( empty( $term_args ) ) {
        return $tag;
    }

    // Combină argumentele dinamice cu cele statice
    $term_args = array_merge( $term_args, array(
        'hide_empty' => false,
    ) );

    $terms = get_terms( $term_args );

    // Adaugă termenii la valori
    if( ! empty( $terms ) && ! is_wp_error( $term_args ) ) {

        foreach( $terms as $term ) {

            $tag['values'][] = $term->name;

        }

    }

    return $tag;

}
add_filter( 'wpcf7_form_tag', 'lista_select_dinamic', 10 );

Codul de mai jos este o metodă mai veche/originală de a face acest lucru și ar trebui considerat învechit.

/** Listă Dinamică pentru Contact Form 7 **/
/** Utilizare: [select nume term:taxonomy_name] **/
function lista_select_dinamic($tag, $unused){ 
    $options = (array)$tag['options'];

    foreach ($options as $option) 
        if (preg_match('%^term:([-0-9a-zA-Z_]+)$%', $option, $matches)) 
            $term = $matches[1];

    //verifică dacă post_type este setat
    if(!isset($term))
        return $tag;

    $taxonomy = get_terms($term, array('hide_empty' => 0));

    if (!$taxonomy)  
        return $tag;

    foreach ($taxonomy as $cat) {  
        $tag['raw_values'][] = $cat->name;  
        $tag['values'][] = $cat->name;  
        $tag['labels'][] = $cat->name;
    }

    $tag['raw_values'][] = 'Altele';  
    $tag['values'][] = 'Altele';  
    $tag['labels'][] = 'Altele - Specificați mai jos';

    return $tag; 
}
add_filter( 'wpcf7_form_tag', 'lista_select_dinamic', 10, 2);
1 oct. 2013 18:16:32
Comentarii

Această soluție este bună, dar începând cu WP 4.5 taxonomiile ar trebui transmise prin argumentul 'taxonomy' în array-ul $args. $taxonomy = get_terms(array('taxonomy' => $term, 'hide_empty' => false));

5ulo 5ulo
23 sept. 2016 19:26:41