Contact Form 7 - Cómo llenar un select con términos de taxonomía personalizada

27 sept 2013, 19:19:42
Vistas: 13.9K
Votos: 7

Con Contact Form 7, ¿es posible llenar un DDL (Lista de Selección) con valores de una Taxonomía Personalizada? Quiero que el usuario pueda hacer clic en la categoría que desea referenciar desde mi Tipo de Contenido Personalizado.

3
Comentarios

Gracias por compartir esta solución. ¿Sería posible excluir algunas categorías de aparecer en el ddl con tu código?

user1690536 user1690536
4 mar 2014 14:24:18

Definitivamente. Puedes usar get_terms que tiene muchas opciones o incluso WP_Query

Howdy_McGee Howdy_McGee
4 mar 2014 16:41:39

bueno, espero que la gente de stack overflow no nos eche diciendo que esto es específico de wordpress.

Nikhil VJ Nikhil VJ
11 feb 2018 16:29:15
Todas las respuestas a la pregunta 1
1
11

Lo siguiente es una forma más actualizada de llenar dinámicamente el select integrado con opciones y podría extenderse fácilmente para admitir más.

/**
 * Lista Select Dinámica para Contact Form 7
 * @uso [select nombre taxonomy:{$taxonomia} ...]
 * 
 * @param Array $tag
 * 
 * @return Array $tag
 */
function dynamic_select_list( $tag ) {

    // Solo ejecutar en listas select
    if( 'select' !== $tag['type'] && ('select*' !== $tag['type']) ) {
        return $tag;
    } else if ( empty( $tag['options'] ) ) {
        return $tag;
    }

    $term_args = array();

    // Recorrer opciones para buscar nuestras opciones personalizadas
    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;

            }
        }

    }

    // Asegurarse de tener argumentos de término para trabajar
    if( empty( $term_args ) ) {
        return $tag;
    }

    // Combinar argumentos dinámicos con argumentos estáticos
    $term_args = array_merge( $term_args, array(
        'hide_empty' => false,
    ) );

    $terms = get_terms( $term_args );

    // Agregar términos a valores
    if( ! empty( $terms ) && ! is_wp_error( $term_args ) ) {

        foreach( $terms as $term ) {

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

        }

    }

    return $tag;

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

Lo siguiente es una forma antigua/original de hacer esto y debería considerarse obsoleta.

/** Lista Dinámica para Contact Form 7 **/
/** Uso: [select nombre term:nombre_taxonomia] **/
function dynamic_select_list($tag, $unused){ 
    $options = (array)$tag['options'];

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

    //verificar si post_type está configurado
    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'][] = 'Otro';  
    $tag['values'][] = 'Otro';  
    $tag['labels'][] = 'Otro - Especifique a continuación';

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

Esta solución está bien, pero desde WordPress 4.5 las taxonomías deben pasarse a través del argumento 'taxonomy' en el array $args. $taxonomy = get_terms(array('taxonomy' => $term, 'hide_empty' => false));

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