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.

Howdy_McGee
20.8K
Comentarios
Todas las respuestas a la pregunta
1
1
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);

Howdy_McGee
20.8K
1 oct 2013 18:16:32
Preguntas relacionadas
1
respuestas
1
respuestas