{"id":93011,"date":"2015-02-27T01:21:00","date_gmt":"2015-02-26T16:21:00","guid":{"rendered":"https:\/\/contactform7.com\/?p=93011"},"modified":"2026-10-14T01:25:32","modified_gmt":"2026-10-13T16:25:32","slug":"using-values-from-a-form-tag","status":"publish","type":"post","link":"https:\/\/contactform7.com\/es\/2015\/02\/27\/using-values-from-a-form-tag\/","title":{"rendered":"Uso de los valores de una etiqueta de formulario"},"content":{"rendered":"\n\n\n\n<p class=\"wp-block-paragraph\">En la <a href=\"http:\/\/contactform7.com\/es\/2015\/01\/10\/adding-a-custom-form-tag\/\">receta anterior<\/a> vimos c\u00f3mo a\u00f1adir etiquetas de formulario personalizadas de forma sencilla. En esta receta aprender\u00e1s a recuperar los valores de una etiqueta de formulario y utilizarlos en el HTML que genera un formulario.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a crear una etiqueta de formulario personalizada que represente un campo de entrada asociado a una lista de datos. <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/datalist\" data-type=\"link\" data-id=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTML\/Element\/datalist\" target=\"_blank\" rel=\"noreferrer noopener\">Datalist<\/a> es un elemento nuevo introducido en HTML5 que proporciona una lista de opciones predefinidas para un campo de entrada asociado a dicha lista.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El siguiente ejemplo muestra el marcado HTML de un campo de texto y una lista de datos.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;input name=&quot;currency&quot; type=&quot;text&quot; list=&quot;currency-options&quot; \/&gt;\n&lt;datalist id=&quot;currency-options&quot;&gt;\n  &lt;option&gt;D\u00f3lares estadounidenses ($)&lt;\/option&gt;\n  &lt;option&gt;Euros (\u20ac)&lt;\/option&gt;\n&lt;\/datalist&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo, el atributo <code>list<\/code> del elemento <code>input<\/code> y el atributo <code>id<\/code> del elemento <code>datalist<\/code> comparten el mismo valor (\u00abcurrency-options\u00bb), por lo que ambos elementos quedan asociados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este campo de entrada espera el nombre de una moneda. Aunque puedes escribir cualquier nombre de moneda, ofrece \u00abD\u00f3lares estadounidenses ($)\u00bb y \u00abEuros (\u20ac)\u00bb como opciones predefinidas, ya que son las respuestas m\u00e1s probables.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"279\" src=\"https:\/\/contactform7.com\/wp-content\/uploads\/screenshot-datalist-spanish.jpg\" alt=\"\" class=\"wp-image-93012\"\/><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\">Dise\u00f1ar una etiqueta de formulario<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a dise\u00f1ar la etiqueta de formulario para un campo de entrada con una lista de datos. Primero, debes decidir el tipo de etiqueta. La llamaremos \u00abdatalist\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el marcado HTML del ejemplo anterior puedes identificar tres variables: el valor del atributo <code>name<\/code> (\u00abcurrency\u00bb, en el ejemplo), los valores de los atributos <code>list<\/code> e <code>id<\/code> (\u00abcurrency-options\u00bb) y el contenido de los elementos <code>option<\/code> (\u00abD\u00f3lares estadounidenses ($)\u00bb y \u00abEuros (\u20ac)\u00bb).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los atributos <code>list<\/code> e <code>id<\/code> deben tener el mismo valor, pero ese valor puede ser cualquiera, siempre que sea v\u00e1lido para un atributo <code>id<\/code>. Si se puede definir autom\u00e1ticamente, por ejemplo, a\u00f1adiendo el sufijo <em>-options<\/em> al valor del atributo <code>name<\/code>, podemos reducir el n\u00famero de variables. As\u00ed, solo tendr\u00e1s que definir en la etiqueta de formulario el valor del atributo <code>name<\/code> y el contenido de los elementos <code>option<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para el valor del atributo <code>name<\/code>, vamos a utilizar la parte <em>name<\/em> (la segunda palabra) de la etiqueta de formulario, ya que es lo habitual en otros tipos de etiquetas de formulario de Contact Form 7.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto al contenido de los elementos <code>option<\/code>, como probablemente ser\u00e1 de formato libre, lo m\u00e1s adecuado es utilizar la parte <em>values<\/em> (las cadenas entre comillas, al final) de la etiqueta de formulario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consulta tambi\u00e9n: <a href=\"http:\/\/contactform7.com\/es\/tag-syntax\/\">C\u00f3mo funcionan las etiquetas<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En resumen, estas decisiones de dise\u00f1o nos permiten representar el marcado HTML del ejemplo anterior con la siguiente etiqueta de formulario sencilla:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a escribir el c\u00f3digo para implementar esta etiqueta de formulario.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Implementar la etiqueta de formulario<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Primero, registra el tipo de etiqueta de formulario \u00abdatalist\u00bb mediante la funci\u00f3n <code>wpcf7_add_form_tag()<\/code>. A diferencia de la etiqueta de formulario <code>[clock]<\/code>, que vimos en la <a href=\"http:\/\/contactform7.com\/es\/2015\/01\/10\/adding-a-custom-form-tag\/\">receta anterior<\/a>, esta etiqueta tiene una parte <em>name<\/em>, por lo que debes establecer el tercer argumento de <code>wpcf7_add_form_tag()<\/code> como <code>array( 'name-attr' => true )<\/code>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nadd_action( &#039;wpcf7_init&#039;, &#039;custom_add_form_tag_datalist&#039; );\n \nfunction custom_add_form_tag_datalist() {\n  wpcf7_add_form_tag(\n    &#039;datalist&#039;,\n    &#039;custom_datalist_form_tag_handler&#039;,\n    array( &#039;name-attr&#039; =&gt; true )\n  );\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, define la funci\u00f3n de retorno de llamada que genera el HTML.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\nfunction custom_datalist_form_tag_handler( $tag ) {\n  $atts = array(\n    &#039;type&#039; =&gt; &#039;text&#039;,\n    &#039;name&#039; =&gt; $tag-&gt;name,\n    &#039;list&#039; =&gt; $tag-&gt;name . &#039;-options&#039;,\n  );\n \n  $input = sprintf(\n    &#039;&lt;input %s \/&gt;&#039;,\n    wpcf7_format_atts( $atts )\n  );\n \n  $datalist = &#039;&#039;;\n \n  foreach ( $tag-&gt;values as $val ) {\n    $datalist .= sprintf( &#039;&lt;option&gt;%s&lt;\/option&gt;&#039;, esc_html( $val ) );\n  }\n \n  $datalist = sprintf(\n    &#039;&lt;datalist id=&quot;%1$s&quot;&gt;%2$s&lt;\/datalist&gt;&#039;,\n    $tag-&gt;name . &#039;-options&#039;,\n    $datalist\n  );\n \n  return $input . $datalist;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">El par\u00e1metro <code>$tag<\/code> que se pasa a la funci\u00f3n de retorno de llamada es un objeto <code>WPCF7_FormTag<\/code>. La clase <code>WPCF7_FormTag<\/code> proporciona varias propiedades y m\u00e9todos para acceder a la informaci\u00f3n de la etiqueta de formulario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta funci\u00f3n, primero creas el elemento <code>input<\/code>. Para ello, defines los atributos necesarios (<code>type<\/code>, <code>name<\/code> y <code>list<\/code>) como elementos de una matriz (<code>$atts<\/code>) y, despu\u00e9s, utilizas la funci\u00f3n <code>wpcf7_format_atts()<\/code> para generar una cadena de atributos con el formato adecuado. Se recomienda utilizar <code>wpcf7_format_atts()<\/code> porque escapa correctamente los valores y permite generar una salida segura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, construyes el elemento <code>datalist<\/code>, que contiene elementos <code>option<\/code> secundarios con los valores de la etiqueta de formulario. Por \u00faltimo, concatenas los elementos <code>input<\/code> y <code>datalist<\/code> y devuelves el resultado de la funci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y eso es todo. Esta etiqueta de formulario sigue siendo muy sencilla y ni siquiera valida los datos introducidos por el usuario. En pr\u00f3ximas recetas veremos c\u00f3mo implementar la validaci\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la receta anterior vimos c\u00f3mo a\u00f1adir etiquetas de formulario personalizadas de forma sencilla. En esta receta aprender\u00e1s a recuperar los valores de una etiqueta de formulario y utilizarlos en el HTML que genera un formulario.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"13351","footnotes":"","jetpack_post_was_ever_published":false},"categories":[19],"tags":[],"class_list":["post-93011","post","type-post","status-publish","format-standard","hentry","category-cookbook","es-ES"],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/posts\/93011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/comments?post=93011"}],"version-history":[{"count":0,"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/posts\/93011\/revisions"}],"wp:attachment":[{"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/media?parent=93011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/categories?post=93011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contactform7.com\/wp-json\/wp\/v2\/tags?post=93011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}