<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>formularios &#8211; danisanchez.net</title>
	<atom:link href="https://danisanchez.net/tag/formularios/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Fri, 22 Mar 2019 09:16:13 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://danisanchez.net/wp-content/uploads/2026/07/cropped-favicon-32x32.png</url>
	<title>formularios &#8211; danisanchez.net</title>
	<link>https://danisanchez.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Crear un select con buscador integrado, gracias a select2</title>
		<link>https://danisanchez.net/crear-un-select-con-buscador-integrado-gracias-a-select2/</link>
					<comments>https://danisanchez.net/crear-un-select-con-buscador-integrado-gracias-a-select2/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 22 Mar 2019 09:16:13 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[select2]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=5183</guid>

					<description><![CDATA[Cuántas veces hemos generado formularios con campos selects interminables (por ejemplo un listado de clientes, de países, de productos&#8230;). Navegar a través de un select de varios cientos de elementos es algo tedioso que seguramente tu cliente o empresa te pedirá solucionar. Lo más óptimo sería ofrecer un campo de búsqueda dentro del propio select [&#8230;]]]></description>
										<content:encoded><![CDATA[
<iframe width="100%" height="315" src="https://www.youtube-nocookie.com/embed/ptZV3Xekmc0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">Cuántas veces hemos generado formularios con campos selects interminables (por ejemplo un listado de clientes, de países, de productos&#8230;). Navegar a través de un select de varios cientos de elementos es algo tedioso que seguramente tu cliente o empresa te pedirá solucionar.</p>



<p class="wp-block-paragraph">Lo más óptimo sería ofrecer un campo de búsqueda dentro del propio select aprovechando jQuery y algo de CSS, lo que nos tocaría unas cuantas horas de investigar y programar.</p>



<p class="wp-block-paragraph">Afortunadamente existe <a href="https://select2.org/" target="_blank" rel="noreferrer noopener" aria-label="Select2 (opens in a new tab)">Select2</a>, una librería pensada precisamente para esto, insertar un campo de búsqueda dentro del campo select que deseemos y que además sea sencillo de implementar.</p>



<h2 class="wp-block-heading">Instalación de select2</h2>



<p class="wp-block-paragraph">Para empezar vamos a llamar a los dos archivos (css y js) necesarios para ejecutar el script y que tendrán que llamarse dentro del &lt;head&gt;&lt;/head&gt; de nuestra página.<code><br></code></p>



<pre class="wp-block-code"><code>&lt;link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet"/&gt;

&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"&gt;&lt;/script&gt;</code></pre>



<p class="wp-block-paragraph">Para WordPress tendremos que integrarlos a través de una función que podemos llamar en nuestro archivo de funciones (functions.php):</p>



<pre class="wp-block-code"><code>function buscador_en_select(){
    wp_enqueue_style('estilos-select', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css', array(),'1.0');
    wp_enqueue_script('jquery'); 
    wp_enqueue_script('script-select', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js', array('jquery'), '1.0');
    wp_enqueue_script('mi-script', get_template_directory_uri().'/js/mi-script.js', array('script-select'),'1.0');
}
add_action('wp_enqueue_scripts', 'buscador_en_select');</code></pre>



<p class="wp-block-paragraph">Como véis, hemos llamado también a jQuery, por si no está ya implementado en el tema y además hemos llamado a mi-script, que es un archivo que crearemos y subiremos al directorio del tema activo en la carpeta js (la crearemos si no existe).</p>



<h2 class="wp-block-heading">Mi Script</h2>



<p class="wp-block-paragraph">Para integrar select2 crearemos un pequeño script en un archivo al que llamaremos mi-script.js y que guardaremos en la ruta /wp-content/themes/tema-activo/js/mi-script.js.</p>



<p class="wp-block-paragraph">En él insertaremos el siguiente código:</p>



<pre class="wp-block-code"><code>jQuery(document).ready(function($){
    $(document).ready(function() {
        $('.mi-selector').select2();
    });
});</code></pre>



<p class="wp-block-paragraph">La línea $(&#8216;mi-selector&#8217;).select2() indica que a todos los select que especifiquemos con la clase &#8216;mi-selector&#8217;, se les aplicará la funcionalidad de integrar un buscador.</p>



<p class="wp-block-paragraph">Por ejemplo:</p>



<pre class="wp-block-code"><code>&lt;select class='mi-selector' name='marcas'&gt;
    &lt;option value=''&gt;Seleccionar una marca&lt;/option&gt;
    &lt;option value='audi'&gt;Audi&lt;/option&gt;
    &lt;option value='bmw'&gt;BMW&lt;/option&gt;
    &lt;option value='citroen'&gt;Citroen&lt;/option&gt;
    &lt;option value='fiat'&gt;Fiat&lt;/option&gt;
    &lt;option value='ford'&gt;Ford&lt;/option&gt;
    &lt;option value='honda'&gt;Honda&lt;/option&gt;
    &lt;option value='hyundai'&gt;Hyundai&lt;/option&gt;
    &lt;option value='kia'&gt;Kia&lt;/option&gt;
    &lt;option value='mazda'&gt;Mazda&lt;/option&gt;
&lt;/select&gt;</code></pre>



<p class="wp-block-paragraph">Se vería así:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="423" height="304" src="https://danisanchez.net/wp-content/uploads/2019/03/captura-select2-2-1-1.jpg" alt="" class="wp-image-5201" srcset="https://danisanchez.net/wp-content/uploads/2019/03/captura-select2-2-1-1.jpg 423w, https://danisanchez.net/wp-content/uploads/2019/03/captura-select2-2-1-1-300x216.jpg 300w" sizes="(max-width: 423px) 100vw, 423px" /></figure></div>



<p class="wp-block-paragraph">También funciona perfecto con <strong>campos de selección múltiple</strong>, solo tenemos que especificarlo en el select, nombrándolo con corchetes (array) y especificando:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">multiple="multiple"</pre></code></pre>



<pre class="wp-block-code"><code>&lt;select class='mi-selector' name='marcas&#91;]' multiple='multiple'&gt;</code></pre>



<p class="wp-block-paragraph">Quedando así:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="355" height="403" src="https://danisanchez.net/wp-content/uploads/2019/03/select-multiple.jpg" alt="" class="wp-image-5200" srcset="https://danisanchez.net/wp-content/uploads/2019/03/select-multiple.jpg 355w, https://danisanchez.net/wp-content/uploads/2019/03/select-multiple-264x300.jpg 264w" sizes="(max-width: 355px) 100vw, 355px" /></figure></div>



<p class="wp-block-paragraph">Como véis, muy sencillo de implementar y muy práctico. Seguro que nos sacará de más de un apuro.</p>



<p class="wp-block-paragraph">Si te ha gustado, compártelo para que más gente pueda aprovecharlo. Nos vemos en el siguiente post <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/crear-un-select-con-buscador-integrado-gracias-a-select2/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Añadir un formulario de sesión de WordPress en cualquier página o widget (sin plugins)</title>
		<link>https://danisanchez.net/anadir-un-formulario-de-sesion-de-wordpress-en-cualquier-pagina-o-widget-sin-plugins/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 31 Dec 2018 12:06:29 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4459</guid>

					<description><![CDATA[A menudo puede ser interesante insertar un formulario de inicio de sesión en alguna página interna o zona de widgets de nuestra plantilla. Para crear el formulario de inicio de sesión, definiremos la función en el archivo de funciones del tema activo (functions.php) o en nuestro propio plugin de funciones. Después vamos a poder llamar [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">A menudo puede ser interesante insertar un formulario de inicio de sesión en alguna página interna o zona de widgets de nuestra plantilla.</p>



<p class="wp-block-paragraph">Para crear el formulario de inicio de sesión, definiremos la función en el archivo de funciones del tema activo (functions.php) o en nuestro propio plugin de funciones. Después vamos a poder llamar a nuestro formulario a través de un simple <em>shortcode.</em></p>



<p class="wp-block-paragraph">Vamos a comenzar, definiendo la función que construirá el formulario de sesión:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">//Formulario inicio de sesión
  function formInicioSesion($atts){
    //Argumentos
    $args = array(
      'echo' => true,
      'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER&#91;'HTTP_HOST'] . $_SERVER&#91;'REQUEST_URI'],
      'form_id' => 'loginform',
      'label_username' => __( 'Username' ),
      'label_password' => __( 'Password' ),
      'label_remember' => __( 'Remember Me' ),
      'label_log_in' => __( 'Log In' ),
      'id_username' => 'user_login',
      'id_password' => 'user_pass',
      'id_remember' => 'rememberme',
      'id_submit' => 'wp-submit',
      'remember' => true,
      'value_username' => '',
      'value_remember' => false
    );
    if(is_user_logged_in()){
      $current_user = wp_get_current_user();
      echo "&lt;section class='widget_text widget widget_custom_html'>";
      echo "&lt;p>&lt;h3>SESIÓN INICIADA&lt;/h3>&lt;/p>";
      echo "Bienvenido/a " . $current_user->display_name . "!";
    ?>
      &lt;p>&lt;a href="&lt;?php echo wp_logout_url(get_permalink()); ?>">Cerrar sesión&lt;/a>&lt;/p>
      &lt;/section>
    &lt;?php
    }
    else{
      echo "&lt;section class='widget_text widget widget_custom_html'>";
      echo "&lt;p>&lt;h3>ACCESO CLIENTES&lt;/h3>&lt;/p>";
      wp_login_form($args);
      echo "&lt;/section>";
    }
  }
  add_shortcode('form-sesion', 'formInicioSesion');</pre></code></pre>



<p class="wp-block-paragraph">Puedes copiar y pegar directamente este código, pero antes vamos a ver un poco en qué consiste.</p>



<p class="wp-block-paragraph">El formulario de sesión lo controla una función interna de WordPress llamada <strong><em>wp_login_form()</em></strong>, a esta función le podemos pasar una serie de argumentos que definimos anteriormente en el array<strong><em> $args</em></strong>.</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">//Argumentos
    $args = array(
      'echo' => true,
      'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER&#91;'HTTP_HOST'] . $_SERVER&#91;'REQUEST_URI'],
      'form_id' => 'loginform',
      'label_username' => __( 'Username' ),
      'label_password' => __( 'Password' ),
      'label_remember' => __( 'Remember Me' ),
      'label_log_in' => __( 'Log In' ),
      'id_username' => 'user_login',
      'id_password' => 'user_pass',
      'id_remember' => 'rememberme',
      'id_submit' => 'wp-submit',
      'remember' => true,
      'value_username' => '',
      'value_remember' => false
    );</pre></code></pre>



<p class="wp-block-paragraph">Algunos de estos argumentos son:</p>



<ul class="wp-block-list"><li>redirect: que redirige a https si se encuentra el SSL habilitado (certificado de seguridad instalado en el servidor).</li><li>label_username: que pinta el campo de nombre de usuario.</li><li>label_password: que pinta el campo de contraseña.</li><li>label_remember: que habilita el checkbox para recordar al usuario en el futuro.</li></ul>



<p class="wp-block-paragraph">Los demás argumentos asocian los datos introducidos en el formulario con las variables internas de WordPress para hacer las comprobaciones de usuario y contraseña.</p>



<p class="wp-block-paragraph">Después de definir los argumentos pasamos a realizar una comprobación:</p>



<pre class="wp-block-preformatted">if(is_user_logged_in()){</pre>



<p class="wp-block-paragraph">Si el usuario ya tiene una sesión iniciada, en lugar de mostrar el formulario de sesión, mostraremos un pequeño texto de bienvenida:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">$current_user = wp_get_current_user();
echo "&lt;section class='widget_text widget widget_custom_html'>";
echo "&lt;p>&lt;h3>SESIÓN INICIADA&lt;/h3>&lt;/p>";
echo "Bienvenido/a " . $current_user->display_name . "!";</pre></code></pre>



<p class="wp-block-paragraph">Para obtener el nombre del usuario, pasamos a <strong><em>$current_user</em></strong> todos los atributos del usuario activo, gracias a la función <strong><em>wp_get_current_user()</em></strong>.</p>



<p class="wp-block-paragraph">Y lo mostramos con <em><strong>$current_user-&gt;display_name</strong></em>.</p>



<p class="wp-block-paragraph">Además, añadimos un pequeño enlace para cerrar sesión, gracias a la función <strong><em>wp_logout_url()</em></strong>, donde se le puede pasar como parámetro la dirección hacia la que redirigir tras cerrar la sesión. En nuestro ejemplo hemos usado <strong><em>the_permalink()</em></strong>, para continuar en la misma página donde nos encontrábamos.</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">&lt;p>&lt;a href="&lt;?php echo wp_logout_url(get_permalink()); ?>">Cerrar sesión&lt;/a>&lt;/p></pre></code></pre>



<p class="wp-block-paragraph">Ahora pasamos a la segunda parte de la condición:</p>



<p class="wp-block-paragraph">Si el usuario no tienen sesión iniciada, mostramos el formulario de sesión con <strong><em>wp_login_form($args)</em></strong>, pasándole como parámetros los argumentos definidos al inicio.</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">}else{
   echo "&lt;section class='widget_text widget widget_custom_html'>";
   echo "&lt;p>&lt;h3>ACCESO CLIENTES&lt;/h3>&lt;/p>";
   wp_login_form($args);
   echo "&lt;/section>";
}</pre></code></pre>



<p class="wp-block-paragraph">Finalmente creamos el <em>shortcode</em> asociado a la función que hemos terminado:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">add_shortcode('form-sesion', 'formInicioSesion');</pre></code></pre>



<p class="wp-block-paragraph">Ahora solamente tenemos que llamar al <em>shortcode</em> en el lugar donde queramos mostrar el formulario, que puede ser en el contenido de una página, en una entrada, o en un simple widget de texto, escribiendo simplemente:</p>


<p>[form-sesion]</p>



<div class="wp-block-image"><figure class="aligncenter size-medium"><img loading="lazy" decoding="async" width="300" height="222" src="https://danisanchez.net/wp-content/uploads/2018/12/captura-form-sesion-300x222.jpg" alt="" class="wp-image-4461" srcset="https://danisanchez.net/wp-content/uploads/2018/12/captura-form-sesion-300x222.jpg 300w, https://danisanchez.net/wp-content/uploads/2018/12/captura-form-sesion-768x568.jpg 768w, https://danisanchez.net/wp-content/uploads/2018/12/captura-form-sesion.jpg 964w" sizes="auto, (max-width: 300px) 100vw, 300px" /></figure></div>



<p class="wp-block-paragraph">Espero que te haya sido de utilidad este último artículo del año 2018.</p>



<p class="wp-block-paragraph">Desde gestionatuweb.net, te deseo unas felices fiestas y próspero año 2019. Nos vemos en siguientes posts!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Datepicker: Integración y configuración en WordPress</title>
		<link>https://danisanchez.net/datepicker-integracion-y-configuracion-en-wordpress/</link>
					<comments>https://danisanchez.net/datepicker-integracion-y-configuracion-en-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 10 Dec 2018 19:28:00 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[datepicker]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4427</guid>

					<description><![CDATA[Artículo en vídeo Datepicker es un calendario basado en JQuery integrado en un campo de formulario, con la finalidad de proporcionar al usuario un método cómodo y sencillo de insertar una fecha. Cuando a un usuario se le pide insertar una fecha en un formulario web, si este no implementa unas reglas básicas o indicaciones [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Artículo en vídeo</h2>



<iframe loading="lazy" width="100%" height="315" src="https://www.youtube-nocookie.com/embed/hXU5Hqn2Ye0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>



<div style="height:25px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph"><br>Datepicker es un calendario basado en JQuery integrado en un campo de formulario, con la finalidad de proporcionar al usuario un método cómodo y sencillo de insertar una fecha.</p>



<p class="wp-block-paragraph">Cuando a un usuario se le pide insertar una fecha en un formulario web, si este no implementa unas reglas básicas o indicaciones claras, el usuario puede verse un poco perdido y no saber de qué forma insertarla:</p>



<p class="wp-block-paragraph"><em>¿Pongo el mes antes que el día?, ¿escribo el mes en números o letras?, ¿el año lo pongo con 2 o 4 cifras?, ¿separo las partes con guiones (-) o diagonales (/)?</em></p>



<p class="wp-block-paragraph">Esto cobra aún más importancia si la fecha se va a guardar en una base de datos que espera que llegue de una forma concreta.</p>



<p class="wp-block-paragraph">Para ello se implementaron herramientas como Datepicker, para que a la hora de insertar una fecha se desplegase un cómodo calendario en el que el usuario seleccionase cómodamente el mes, día y año sin errores, y todo se enviase a la base de datos debidamente procesado.</p>



<p class="wp-block-paragraph">Actualmente, los navegadores web ya incorporan campos de tipo fecha <em>&lt;input type=»date»/&gt;</em>, como puedes ver en el siguiente campo:</p>



<p class="wp-block-paragraph"><strong>Selecciona una fecha:</strong> </p>



<p class="wp-block-paragraph">Cada navegador tiene su particular calendario, que como base, ayuda a que el usuario inserte una fecha correctamente, aunque de cara a funcionalidades más avanzadas están muy limitados.</p>



<p class="wp-block-paragraph">Por ejemplo, no podemos enlazar dos campos de tipo fecha para que se comuniquen entre sí. Imagina que quieres incorporar un sistema de reserva de apartamentos en tu web, y quieres que cuando el usuario inserte la fecha de entrada, automáticamente la fecha de salida parta del día siguiente a la fecha de entrada, o que no se pueda escoger como fecha de salida, una fecha anterior a la de entrada. Con los calendarios basícos integrados por los navegadores actuales esto no es posible.</p>



<p class="wp-block-paragraph"><strong>Pero con Datepicker si.</strong></p>



<p class="wp-block-paragraph">Para todo lo que requiera de una avanzada programación de fechas, Datepicker sigue siendo una excelente herramienta, y en este post vamos a ver cómo integrarlo en WordPress y cómo hacer las configuraciones más útiles dentro de cualquier sistema de reservas.</p>



<h2 class="wp-block-heading">1. Descargar Datepicker</h2>



<p class="wp-block-paragraph">El primer paso es acudir a la web de <a href="https://jqueryui.com/download/" target="_blank" rel="noreferrer noopener">descarga de Datepicker</a> y descargar la última versión estable, que en el momento de escribir este post es la 1.12.1.</p>



<p class="wp-block-paragraph">Tras descomprimir el ZIP, los archivos que nos interesa son:</p>



<ul class="wp-block-list"><li>jquery-ui.css</li><li>jquery-ui.structure.css</li><li>jquery-ui.theme.css</li><li>jquery-ui.js</li><li><strong>Además, crearemos un archivo .js para nuestras propias funciones JavasScript, al que llamaremos funciones.js.</strong></li></ul>



<p class="wp-block-paragraph">Y la carpeta images que tendremos que subir al mismo directorio que los archivos CSS.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="688" height="529" src="https://danisanchez.net/wp-content/uploads/2018/12/01-archivos-datepicker.jpeg" alt="" class="wp-image-4432" srcset="https://danisanchez.net/wp-content/uploads/2018/12/01-archivos-datepicker.jpeg 688w, https://danisanchez.net/wp-content/uploads/2018/12/01-archivos-datepicker-300x231.jpeg 300w" sizes="auto, (max-width: 688px) 100vw, 688px" /></figure></div>



<p class="wp-block-paragraph">Mi recomendación es subirlos a la misma carpeta donde se encuentra el tema activo de WordPress, es decir /wp-content/themes/tema_activo/</p>



<p class="wp-block-paragraph">Y dentro crear, si no existen, dos subdirectorios, css y js.</p>



<p class="wp-block-paragraph">/wp-content/themes/tema_activo<strong>/css</strong>/ donde subiremos los archivos CSS y la carpeta images de Datepicker.</p>



<p class="wp-block-paragraph">/wp-content/themes/tema_activo<strong>/js</strong>/ donde subiremos el archivo .js de Datepicker y nuestro archivo funciones.js.</p>



<p class="wp-block-paragraph">De tal forma que la estructura de archivos de Datepicker quede así en nuestro proyecto:</p>



<ul class="wp-block-list"><li>wp-content/themes/tema_activo/css/jquery-ui.css</li><li>wp-content/themes/tema_activo/css/jquery-ui-theme.css</li><li>wp-content/themes/tema_activo/css/jquery-ui.structure.css</li><li>wp-content/themes/tema_activo/css/images/</li><li>wp-content/themes/tema_activo/js/jquery-ui.js</li><li>wp-content/themes/tema_activo/js/funciones.js</li></ul>



<h2 class="wp-block-heading">2. Declarar los archivos de Datepicker en WordPress</h2>



<p class="wp-block-paragraph">Una vez subidos todos los archivos, necesitamos declararlos en WordPress para que este los reconozca. Lo normal es hacerlo dentro del archivo de funciones (functions.php) del tema activo, pero si es un tema que se actualiza con frecuencia, también podemos <a href="https://danisanchez.net/wordpress-crear-nuestro-propio-plugin-de-funciones/" target="_blank" rel="noreferrer noopener">crear nuestro propio plugin de funciones</a> y declararlo ahí de la misma forma:</p>



<pre class="wp-block-code"><code>&lt;?php
function js_calendarios(){
   wp_enqueue_script('jquery');
   wp_enqueue_style('calendario-css', get_template_directory_uri().'/css/jquery-ui.css', array(), '1.0');
   wp_enqueue_style('calendario-css-2', get_template_directory_uri().'/css/jquery-ui.theme.css', array(), '1.0');
   wp_enqueue_style('calendario-css-3', get_template_directory_uri().'/css/jquery-ui.structure.css', array(), '1.0');
   wp_enqueue_script('calendario-js', get_template_directory_uri().'/js/jquery-ui.js', array('jquery'), '1.0');
   wp_enqueue_script('funciones-js', get_template_directory_uri().'/js/funciones.js', array('jquery'), '1.0');
}
add_action('wp_enqueue_scripts', 'js_calendarios');
?&gt;</code></pre>



<h2 class="wp-block-heading">3. Configuraciones básicas de Datepicker</h2>



<p class="wp-block-paragraph">Para personalizar nuestro calendario, nos vamos a dirigir a nuestro archivo <strong>funciones.js </strong>y escribimos:</p>



<pre class="wp-block-code"><code>$ = jQuery.noConflict();
$(document).ready(function(){
    $(function(){
        $("#datepicker1").datepicker();
    });
});</code></pre>



<p class="wp-block-paragraph">El identificador #datepicker1 es el que tenemos que usar en el campo input donde queremos que aparezca el calendario, por ejemplo:</p>



<pre class="wp-block-code"><code>&lt;input type="text" name="fecha_entrada" id="datepicker1" placeholder="Fecha de entrada" /&gt;</code></pre>



<p class="wp-block-paragraph">Imprimiría:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="612" height="453" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen.jpeg" alt="" class="wp-image-4435" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen.jpeg 612w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-300x222.jpeg 300w" sizes="auto, (max-width: 612px) 100vw, 612px" /></figure></div>



<p class="wp-block-paragraph">Hasta aquí no difiere mucho de la funcionalidad del calendario integrado por los propios navegadores, además por defecto está inglés, tanto las cadenas de texto como el hecho de que la semana comienza en Domingo.</p>



<p class="wp-block-paragraph">Vamos a comenzar definiendo las etiquetas para que aparezca en español. Para ello tenemos que añadir una serie de parámetros a la función <em>datepicker()</em>, tal y como se muestra en el siguiente código:</p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
   closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
});</code></pre>



<p class="wp-block-paragraph">Así conseguimos que nuestro calendario ahora se vea en español:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="605" height="450" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-02.jpeg" alt="" class="wp-image-4437" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-02.jpeg 605w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-02-300x223.jpeg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></figure></div>



<p class="wp-block-paragraph">Pero nos falta un detalle más, y es hacer que la semana comience en Lunes en lugar de Domingo, para ello añadimos el parámetro:</p>



<p class="wp-block-paragraph"><em>firstDay: 1</em></p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
   firstDay: 1, //Hace que la semana comience en Lunes
});</code></pre>



<p class="wp-block-paragraph">Y aquí el resultado:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="597" height="445" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-03.jpeg" alt="" class="wp-image-4439" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-03.jpeg 597w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-03-300x224.jpeg 300w" sizes="auto, (max-width: 597px) 100vw, 597px" /></figure></div>



<p class="wp-block-paragraph">Otra opción interesante es que no se pueda seleccionar un día anterior a la fecha actual, es decir, si hoy estamos a 10 de Diciembre de 2018, el calendario no nos va a permitir seleccionar una fecha anterior, para ello añadimos el parámetro:</p>



<p class="wp-block-paragraph"><em>minDate: 0</em></p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
   firstDay: 1, //Hace que la semana comience en Lunes
   minDate: 0, //Hace que no se puedan seleccionar fechas pasadas
});</code></pre>



<p class="wp-block-paragraph">Fijaos cómo los días anteriores aparecen en un color más transparente, indicando que no se pueden seleccionar:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="590" height="431" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-04.jpeg" alt="" class="wp-image-4440" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-04.jpeg 590w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-04-300x219.jpeg 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></figure></div>



<p class="wp-block-paragraph">Respecto al formato actual de la fecha, si seleccionamos un día en concreto veremos que el formato está definido en «mes/dia/año»:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="588" height="429" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-05.jpeg" alt="" class="wp-image-4442" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-05.jpeg 588w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-05-300x219.jpeg 300w" sizes="auto, (max-width: 588px) 100vw, 588px" /></figure></div>



<p class="wp-block-paragraph">Si queremos modificar el formato de fecha usamos el parámetro:</p>



<p class="wp-block-paragraph"><em>dateFormat: «dd/mm/yy»</em></p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
   firstDay: 1, //Hace que la semana comience en Lunes
   minDate: 0, //Hace que no se puedan seleccionar fechas pasadas
   dateFormat: "dd/mm/yy", //Establece el formato de fecha
});</code></pre>



<p class="wp-block-paragraph">Cuyo resultado sería:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="586" height="426" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-06.jpeg" alt="" class="wp-image-4443" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-06.jpeg 586w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-06-300x218.jpeg 300w" sizes="auto, (max-width: 586px) 100vw, 586px" /></figure></div>



<p class="wp-block-paragraph">Otra opción que podría resultarnos de interés es la posibilidad de cambiar el mes y el año directamente, para ello usaríamos los parámetros:</p>



<p class="wp-block-paragraph"><em>changeMonth: true,</em><br><em>changeYear: true,</em></p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
   firstDay: 1, //Hace que la semana comience en Lunes
   minDate: 0, //Hace que no se puedan seleccionar fechas pasadas
   dateFormat: "dd/mm/yy", //Establece el formato de fecha
   changeMonth: true, //Permite seleccionar el mes directamente
   changeYear: true, //Permite seleccionar el año directamente
});</code></pre>



<p class="wp-block-paragraph">El resultado:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="600" height="513" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-07.jpeg" alt="" class="wp-image-4445" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-07.jpeg 600w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-07-300x257.jpeg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure></div>



<h2 class="wp-block-heading">4. Enlazando dos Datepickers</h2>



<p class="wp-block-paragraph">Hasta aquí hemos realizado configuraciones básicas, sobre todo para adaptar Datepicker al sistema de calendario español. Ahora veremos algo realmente interesante que consiste en enlazar dos calendarios Datepicker, de forma que cuando se seleccione una fecha en el Datepicker1, el Datepicker2 impida seleccionar una fecha anterior, muy interesante para sistemas de reservas.</p>



<p class="wp-block-paragraph">Para ello vamos a declarar un segundo Datepicker al que llamaremos #datepicker2, con los mismos parámetros que el #datepicker1.</p>



<pre class="wp-block-code"><code>$("#datepicker2").datepicker({
closeText: 'Cerrar',
   prevText: '&lt; Ant',
   nextText: 'Sig &gt;',
   currentText: 'Hoy',
   monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
   monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
   dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
   dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
   dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'], 
   firstDay: 1, //Hace que la semana comience en Lunes
   minDate: 0, //Hace que no se puedan seleccionar fechas pasadas
   dateFormat: "dd/mm/yy", //Establece el formato de fecha
   changeMonth: true, //Permite seleccionar el mes directamente
   changeYear: true, //Permite seleccionar el año directamente
});</code></pre>



<p class="wp-block-paragraph">Ahora añadimos como parámetro al #datepicker1 el siguiente código:</p>



<pre class="wp-block-code"><code>onClose: function (selectedDate){
    $("#datepicker2").datepicker("option", "minDate", selectedDate);
}</code></pre>



<p class="wp-block-paragraph">Y como parámetro del #datepicker2 el siguiente código:</p>



<pre class="wp-block-code"><code>onClose: function (selectedDate){
    $("#datepicker1").datepicker("option", "maxDate", selectedDate);
}</code></pre>



<p class="wp-block-paragraph">Recuerda añadir una coma (,) al final si vas a seguir añadiendo parámetros.</p>



<p class="wp-block-paragraph">Creamos un nuevo input:</p>



<pre class="wp-block-code"><code>&lt;input type="text" name="fecha_salida" id="datepicker2" placeholder="Fecha de salida"/&gt;</code></pre>



<p class="wp-block-paragraph">Y aquí el resultado, si seleccionamos como fecha de entrada el 25 de Diciembre, veremos que en fecha de salida no podemos seleccionar días anteriores al 25 de Diciembre:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="640" height="477" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-09.jpeg" alt="" class="wp-image-4447" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-09.jpeg 640w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-09-300x224.jpeg 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure></div>



<p class="wp-block-paragraph">Y ya para finalizar veremos una función para deshabilitar rangos de fechas, es decir, imagina que en tu web de reserva de apartamentos quieres que cuando el usuario despligue el calendario aparezcan bloqueados todos los días que esté reservado.</p>



<p class="wp-block-paragraph">Para ello, previamente, tendríamos que hacer una consulta a la base de datos para traernos las fechas de entrada y salida de cada reserva y guardarlas en un vector o array:</p>



<p class="wp-block-paragraph">Para la función siguiente necesitamos recoger las fechas de la base de datos y pasarlas a formato «mes/día/año».</p>



<p class="wp-block-paragraph">En PHP es fácil:</p>



<pre class="wp-block-code"><code>&lt;?php
    $fecha_formateada = new DateTime($fecha_sin_formatear);
    echo $fecha_formateada-&gt;format('m/d/Y');
?&gt;</code></pre>



<p class="wp-block-paragraph">Cada grupo de fechas entrecomilladas representa un rango (fecha de entrada y fecha de salida), añadimos tantos rangos como reservas haya en la base de datos:</p>



<pre class="wp-block-code"><code>var RangeDates = &#91;"01/10/2019,01/15/2019","01/17/2019,01/24/2019"];
var RangeDatesIsDisable = true;</code></pre>



<p class="wp-block-paragraph">Este ejemplo tomaría 2 rangos de fechas, compuestos por:</p>



<ol class="wp-block-list"><li>Del 10 de Enero de 2019 al 15 de Enero de 2019.</li><li>Del 17 de Enero de 2019 al 24 de Enero de 2019</li></ol>



<p class="wp-block-paragraph">Pasamos la siguiente función que hará las comprobaciones, desglosando los meses, días y años de cada fecha:</p>



<pre class="wp-block-code"><code>function DisableDays(date){
    var isd = RangeDatesIsDisable;
    var rd = RangeDates;
    var m = date.getMonth();
    var d = date.getDate();
    var y = date.getFullYear();
    for (i = 0; i &lt; rd.length; i++){
        var ds = rd&#91;i].split(',');
        var di, df;
        var m1, d1, y1, m2, d2, y2;
        if(ds.length == 1){
            di = ds&#91;0].split('/');
            m1 = parseInt(di&#91;0]);
            d1 = parseInt(di&#91;1]);
            y1 = parseInt(di&#91;2]);
            if (y1 == y &amp;&amp; m1 == (m + 1) &amp;&amp; d1 == d) return &#91;!isd];
        }
 else if (ds.length &gt; 1){
            di = ds&#91;0].split('/');
            df = ds&#91;1].split('/');
            m1 = parseInt(di&#91;0]);
            d1 = parseInt(di&#91;1]);
            y1 = parseInt(di&#91;2]);
            m2 = parseInt(df&#91;0]);
            d2 = parseInt(df&#91;1]);
            y2 = parseInt(df&#91;2]);
          if(y1 &gt;= y || y &lt;= y2){
              if ((m + 1) &gt;= m1 &amp;&amp; (m + 1) &lt;= m2){
             if (m1 == m2){
                 if (d &gt;= d1 &amp;&amp; d &lt;= d2) return &#91;!isd];
                }
 else if(m1 == (m + 1)){
                    if (d &gt;= d1) return &#91;!isd];
                }
 else if(m2 == (m + 1)){
                    if (d &lt;= d2) return &#91;!isd];
                }
 else return &#91;!isd];
              }
          }
        }
    }
    return &#91;isd];
}</code></pre>



<p class="wp-block-paragraph">Y por último añadimos el parámetro: <em>beforeShowDay: DisableDays, </em>a los dos Datepicker, quedando finalmente ambos así:</p>



<pre class="wp-block-code"><code>$("#datepicker1").datepicker({
    closeText: 'Cerrar',
    prevText: '&lt; Ant',
    nextText: 'Sig &gt;',
    currentText: 'Hoy',
    monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
    monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
    dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
    dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
    dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'],
    firstDay: 1,
    minDate: 0,
    dateFormat: "dd/mm/yy",
    changeMonth: true,
    changeYear: true,
    beforeShowDay: DisableDays,
    onClose: function (selectedDate){
        $("#datepicker2").datepicker("option", "minDate", selectedDate); 
    }
});
$("#datepicker2").datepicker({
    closeText: 'Cerrar',
    prevText: '&lt; Ant',
    nextText: 'Sig &gt;',
    currentText: 'Hoy',
    monthNames: &#91;'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
    monthNamesShort: &#91;'Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
    dayNames: &#91;'Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
    dayNamesShort: &#91;'Dom','Lun','Mar','Mié','Juv','Vie','Sáb'],
    dayNamesMin: &#91;'Do','Lu','Ma','Mi','Ju','Vi','Sá'],
    firstDay: 1,
    minDate: 0,
    dateFormat: "dd/mm/yy",
    changeMonth: true,
    changeYear: true,
    beforeShowDay: DisableDays,
    onClose: function (selectedDate){
        $("#datepicker1").datepicker("option", "minDate", selectedDate);
    }
});</code></pre>



<p class="wp-block-paragraph">Como se aprecia al desplegar el calendario de fecha de entrada, ambos rangos aparecen deshabilitados:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="653" height="451" src="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-10.jpeg" alt="" class="wp-image-4449" srcset="https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-10.jpeg 653w, https://danisanchez.net/wp-content/uploads/2018/12/datepicker-imagen-10-300x207.jpeg 300w" sizes="auto, (max-width: 653px) 100vw, 653px" /></figure></div>



<p class="wp-block-paragraph">Esto es solo un extracto de lo que considero es más importante y habitual configurar en cualquier sistema de reservas, pero en la documentación oficial de Datepicker encontrarás más funcionalidades, métodos y parámetros de configuración:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="http://api.jqueryui.com/datepicker/" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="893" height="555" src="https://danisanchez.net/wp-content/uploads/2018/12/documentacion-datepicker.jpeg" alt="" class="wp-image-4450" srcset="https://danisanchez.net/wp-content/uploads/2018/12/documentacion-datepicker.jpeg 893w, https://danisanchez.net/wp-content/uploads/2018/12/documentacion-datepicker-300x186.jpeg 300w, https://danisanchez.net/wp-content/uploads/2018/12/documentacion-datepicker-768x477.jpeg 768w" sizes="auto, (max-width: 893px) 100vw, 893px" /></a></figure></div>



<p class="wp-block-paragraph">Espero que este post te haya sido de interés y utilidad, si es así no dudes en compartirlo o guardarlo en tus favoritos para futuras consultas.</p>



<p class="wp-block-paragraph">Nos vemos en el siguiente post! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/datepicker-integracion-y-configuracion-en-wordpress/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo añadir un checkbox en el formulario de registro de WordPress para aceptar la política de privacidad</title>
		<link>https://danisanchez.net/como-anadir-checkbox-formulario-registro-wordpress-politica-privacidad/</link>
					<comments>https://danisanchez.net/como-anadir-checkbox-formulario-registro-wordpress-politica-privacidad/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 20 Aug 2018 17:02:34 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4260</guid>

					<description><![CDATA[Si queremos permitir que cualquier usuario se registre en nuestro sitio web con WordPress, tenemos que añadir de alguna forma el «check» que valide que nuestro usuario ha aceptado los términos y condiciones de la política de privacidad de nuestro sitio web, tal y como obliga el actual RGPD. Esta casilla de verificación (checkbox) no [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si queremos permitir que cualquier usuario se registre en nuestro sitio web con WordPress, tenemos que añadir de alguna forma el «check» que valide que nuestro usuario ha aceptado los términos y condiciones de la política de privacidad de nuestro sitio web, tal y como obliga el actual RGPD.</p>



<p class="wp-block-paragraph">Esta casilla de verificación (checkbox) no se encuentra por defecto en el formulario de registro de WordPress.</p>



<p class="wp-block-paragraph">Lo primero que tenemos que hacer es habilitar el registro de usuarios en los ajustes generales de WordPress, habilitando la casilla <strong>Cualquiera puede registrarse</strong>.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="751" height="144" src="https://danisanchez.net/wp-content/uploads/2018/08/001.jpeg" alt="" class="wp-image-4261" srcset="https://danisanchez.net/wp-content/uploads/2018/08/001.jpeg 751w, https://danisanchez.net/wp-content/uploads/2018/08/001-300x58.jpeg 300w" sizes="auto, (max-width: 751px) 100vw, 751px" /></figure></div>



<p class="wp-block-paragraph">Luego podemos crear un enlace hacia el formulario de registro utilizando el slug: <strong>www.tuweb.com/wp-login.php?action=register</strong></p>



<p class="wp-block-paragraph">WordPress también ofrece el enlace de registro en el formulario de inicio de sesión:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="408" height="544" src="https://danisanchez.net/wp-content/uploads/2018/08/002.jpeg" alt="" class="wp-image-4262" srcset="https://danisanchez.net/wp-content/uploads/2018/08/002.jpeg 408w, https://danisanchez.net/wp-content/uploads/2018/08/002-225x300.jpeg 225w" sizes="auto, (max-width: 408px) 100vw, 408px" /></figure></div>



<p class="wp-block-paragraph">Una vez accedemos al formulario de registro por defecto de WordPress tenemos los campos para nombre de usuario y dirección de e-mail. Aquí necesitamos añadir la casilla de validación (checkbox) para asegurarnos del consentimiento de políticas de privacidad de nuestro nuevo usuario.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="412" height="629" src="https://danisanchez.net/wp-content/uploads/2018/08/003.jpeg" alt="" class="wp-image-4264" srcset="https://danisanchez.net/wp-content/uploads/2018/08/003.jpeg 412w, https://danisanchez.net/wp-content/uploads/2018/08/003-197x300.jpeg 197w" sizes="auto, (max-width: 412px) 100vw, 412px" /></figure></div>



<p class="wp-block-paragraph">Para añadirla vamos a insertar una nueva función en el archivo functions.php de nuestro tema:</p>



<pre class="wp-block-code"><code>function aceptacion_terminos_registro_wordpress() {
    echo &lt;input type='checkbox' name='acepto'/&gt; Acepto los &lt;a href='#'&gt;términos y condiciones&lt;/a&gt;&lt;/b&gt; de la política de protección de datos.";
}
add_action('register_form', 'aceptacion_terminos_registro_wordpress');</code></pre>



<p class="wp-block-paragraph">Dentro del &lt;a href=»#»&gt; sustituimos la almohadilla (#) por la URL donde se encuentre nuestro aviso legal.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="465" height="691" src="https://danisanchez.net/wp-content/uploads/2018/08/004.jpeg" alt="" class="wp-image-4265" srcset="https://danisanchez.net/wp-content/uploads/2018/08/004.jpeg 465w, https://danisanchez.net/wp-content/uploads/2018/08/004-202x300.jpeg 202w" sizes="auto, (max-width: 465px) 100vw, 465px" /></figure></div>



<p class="wp-block-paragraph">Ahora solo nos queda validar que la casilla haya sido activada, por lo que agregamos la siguiente función:</p>



<pre class="wp-block-code"><code>function validar_aceptacion($errors, $sanitized_user_login, $user_email){
    if(empty($_POST&#91;'acepto'])){
        $errors-&gt;add('acepto_error', __('&lt;strong&gt;ERROR&lt;/strong&gt;: Debes marcar la casilla de aceptación de privacidad.', 'gestionatuweb'));
    }
    return $errors;
}
add_filter('registration_errors', 'validar_aceptacion', 10, 3);</code></pre>



<p class="wp-block-paragraph">Ahora si intentamos registrarnos sin haber marcado la casilla de aceptación, aparecerá un error que no nos permitirá finalizar el registro y cumpliremos perfectamente con el nuevo RGPD.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="429" height="728" src="https://danisanchez.net/wp-content/uploads/2018/08/005.jpeg" alt="" class="wp-image-4266" srcset="https://danisanchez.net/wp-content/uploads/2018/08/005.jpeg 429w, https://danisanchez.net/wp-content/uploads/2018/08/005-177x300.jpeg 177w" sizes="auto, (max-width: 429px) 100vw, 429px" /></figure></div>



<p class="wp-block-paragraph">Si te ha gustado el artículo, compártelo y ayúdame a difundirlo. Hasta el siguiente post <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/como-anadir-checkbox-formulario-registro-wordpress-politica-privacidad/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Crear un sistema de reservas on-line para WordPress</title>
		<link>https://danisanchez.net/crear-un-sistema-de-reservas-on-line-para-wordpress/</link>
					<comments>https://danisanchez.net/crear-un-sistema-de-reservas-on-line-para-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Wed, 19 Jul 2017 12:09:25 +0000</pubDate>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://www.gestionatuweb.net/?p=2843</guid>

					<description><![CDATA[Si tienes que desarrollar una web donde los clientes puedan solicitar una reserva en un día o período de tiempo determinado, necesitas implementar un sistema de reservas. En este artículo veremos un plugin sencillo que te hará la vida más fácil. Se llama Booking Calendar del desarrollador WpDevArt. Una vez instalado se nos añadirá un [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/KV1HLWY11YI" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>



<p class="wp-block-paragraph">Si tienes que desarrollar una web donde los clientes puedan solicitar una reserva en un día o período de tiempo determinado, necesitas implementar un sistema de reservas. En este artículo veremos un plugin sencillo que te hará la vida más fácil.</p>



<p class="wp-block-paragraph">Se llama <a href="https://es.wordpress.org/plugins/booking-calendar/" target="_blank" rel="noopener noreferrer">Booking Calendar</a> del desarrollador <a href="http://wpdevart.com/" target="_blank" rel="noopener noreferrer">WpDevArt</a>.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/001-2-1.jpg"><img loading="lazy" decoding="async" width="756" height="250" src="https://danisanchez.net/wp-content/uploads/2017/07/001-2.jpg" alt="" class="wp-image-2844" srcset="https://danisanchez.net/wp-content/uploads/2017/07/001-2.jpg 756w, https://danisanchez.net/wp-content/uploads/2017/07/001-2-300x99.jpg 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></a></figure></div>



<p class="wp-block-paragraph">Una vez instalado se nos añadirá un nuevo menú al menú principal de WordPress, Booking Calendar con algunos apartados.</p>



<p class="wp-block-paragraph">Booking Calendar tiene una versión FREE suficiente para implementar sistemas básicos de reservas, y una versión PREMIUM con algunas funcionalidades más, como la posibilidad de editar el diseño, editar reservas a mano o implementar sistemas de pago on-line. La licencia para un sitio cuesta a día de hoy (17-07-2017) unos 60$, por si os interesa para vuestra web o tenéis que presupuestar el trabajo a un cliente.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/002-2-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="1221" height="701" src="https://danisanchez.net/wp-content/uploads/2017/07/002-2.jpg" alt="" class="wp-image-2845" srcset="https://danisanchez.net/wp-content/uploads/2017/07/002-2.jpg 1221w, https://danisanchez.net/wp-content/uploads/2017/07/002-2-300x172.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/002-2-1024x588.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/002-2-768x441.jpg 768w" sizes="auto, (max-width: 1221px) 100vw, 1221px" /></a></figure></div>



<p class="wp-block-paragraph">El procedimiento es muy sencillo, desde la pantalla principal de Booking Calendar podemos crear nuestros calendarios. Por defecto ya tenemos uno de ejemplo con un shortcode que es lo que tenemos que pegar en la página donde queremos que aparezca el calendario.</p>



<h2 class="wp-block-heading">Añadir un nuevo calendario.</h2>



<p class="wp-block-paragraph">Vamos a añadir un nuevo calendario haciendo clic en <strong>Add Calendar</strong>. Vamos a imaginar que estamos desarrollando la web para un Hotel u Hostal y queremos agregar un Calendario de Reservas en la página de habitaciones dobles.</p>



<p class="wp-block-paragraph">Le damos un título al calendario, seleccionamos el tema (al ser versión FREE solo nos va a dejar usar el tema por defecto), seleccionamos si queremos mostrar &nbsp;o no un formulario de solicitud de reserva (por defecto a parece el formulario de ejemplo que integra el plugin), y si queremos seleccionar algún extra que podemos configurar más adelante.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/003-2-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="639" height="316" src="https://danisanchez.net/wp-content/uploads/2017/07/003-2.jpg" alt="" class="wp-image-2846" srcset="https://danisanchez.net/wp-content/uploads/2017/07/003-2.jpg 639w, https://danisanchez.net/wp-content/uploads/2017/07/003-2-300x148.jpg 300w" sizes="auto, (max-width: 639px) 100vw, 639px" /></a></figure></div>



<p class="wp-block-paragraph">Si interactuamos con el calendario, seleccionando por ejemplo un día o un rango de días, aparecerán unas opciones a la derecha:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2017/07/004-2-1.jpg" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2017/07/004-2-1.jpg" alt="" class="wp-image-2847"/></a></figure>



<h3 class="wp-block-heading"><strong>Set days availability</strong></h3>



<p class="wp-block-paragraph">Desde aquí podemos habilitar o deshabilitar fechas en función de si queremos que estén disponibles para reservar, o indicar que ya están reservas o simplemente indicar que no están disponibles.</p>



<ul class="wp-block-list"><li><strong>Start date y End Date</strong> nos marca las fechas que tenemos seleccionadas en el calendario.</li><li><strong>Number Available:</strong> Podemos indicar cuántas reservas se pueden realizar para los días señalados. (Por ejemplo, podemos tener cinco habitaciones dobles en el hotel y no tenemos que crear un calendario para cada una de ellas, solo indicar cuántas hay disponibles).</li><li><strong>Price:</strong> Aparecerá el precio para día del calendario.</li><li>Las demás opciones se habilitan actualizando a la versión PRO, que no veremos en esta guía.</li></ul>



<p class="wp-block-paragraph">Para nuestro ejemplo, vamos a indicar que los días señalados están disponibles para reservar y que el coste es de 30,00€ cada uno, quedando el calendario así:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/005-1-2.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="628" height="502" src="https://danisanchez.net/wp-content/uploads/2017/07/005-1-1.jpg" alt="" class="wp-image-2848" srcset="https://danisanchez.net/wp-content/uploads/2017/07/005-1-1.jpg 628w, https://danisanchez.net/wp-content/uploads/2017/07/005-1-1-300x240.jpg 300w" sizes="auto, (max-width: 628px) 100vw, 628px" /></a></figure></div>



<p class="wp-block-paragraph">No olvidéis salvar los cambios si abandonáis esta página.</p>



<p class="wp-block-paragraph">Si queremos hacer alguna modificación en los días editados, como por ejemplo, aumentar el precio de la habitación en fin de semana, o marcar que un día está ocupado porque nos ha entrado un huésped, solo tenemos que marcar el día a modificar y aparecerán de nuevo las opciones para editarlo.</p>



<p class="wp-block-paragraph">Por ejemplo, marcamos que el día 27 está reservado, y que el precio de las habitaciones en fin de semana es de 40,00€:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/006-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="1294" height="652" src="https://danisanchez.net/wp-content/uploads/2017/07/006.jpg" alt="" class="wp-image-2849" srcset="https://danisanchez.net/wp-content/uploads/2017/07/006.jpg 1294w, https://danisanchez.net/wp-content/uploads/2017/07/006-300x151.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/006-1024x516.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/006-768x387.jpg 768w" sizes="auto, (max-width: 1294px) 100vw, 1294px" /></a></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/007-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="1272" height="644" src="https://danisanchez.net/wp-content/uploads/2017/07/007.jpg" alt="" class="wp-image-2850" srcset="https://danisanchez.net/wp-content/uploads/2017/07/007.jpg 1272w, https://danisanchez.net/wp-content/uploads/2017/07/007-300x152.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/007-1024x518.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/007-768x389.jpg 768w" sizes="auto, (max-width: 1272px) 100vw, 1272px" /></a></figure></div>



<p class="wp-block-paragraph">Nuestro calendario quedará así:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/008-1-2.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="646" height="514" src="https://danisanchez.net/wp-content/uploads/2017/07/008-1-1.jpg" alt="" class="wp-image-2851" srcset="https://danisanchez.net/wp-content/uploads/2017/07/008-1-1.jpg 646w, https://danisanchez.net/wp-content/uploads/2017/07/008-1-1-300x239.jpg 300w" sizes="auto, (max-width: 646px) 100vw, 646px" /></a></figure></div>



<h2 class="wp-block-heading">Apartado Forms</h2>



<p class="wp-block-paragraph">Bien, vamos a pasar a otro apartado dentro de Booking Calendar,&nbsp;&nbsp;<strong>Forms.</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/009-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="1098" height="286" src="https://danisanchez.net/wp-content/uploads/2017/07/009.jpg" alt="" class="wp-image-2852" srcset="https://danisanchez.net/wp-content/uploads/2017/07/009.jpg 1098w, https://danisanchez.net/wp-content/uploads/2017/07/009-300x78.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/009-1024x267.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/009-768x200.jpg 768w" sizes="auto, (max-width: 1098px) 100vw, 1098px" /></a></figure></div>



<p class="wp-block-paragraph">Aquí podemos configurar que nuestros calendarios incluyan un formulario de solicitud de reservas para que el cliente pueda marcar las fechas que desea reservar y que sus datos de contacto sean guardados en la solicitud.</p>



<p class="wp-block-paragraph">Podemos añadir un nuevo formulario o editar el existente:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/010-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="635" height="621" src="https://danisanchez.net/wp-content/uploads/2017/07/010.jpg" alt="" class="wp-image-2853" srcset="https://danisanchez.net/wp-content/uploads/2017/07/010.jpg 635w, https://danisanchez.net/wp-content/uploads/2017/07/010-300x293.jpg 300w" sizes="auto, (max-width: 635px) 100vw, 635px" /></a></figure></div>



<p class="wp-block-paragraph">Los campos por defecto son: nombre, apellido, e-mail, teléfono y mensaje. Podemos expandir las opciones de cada campo dando a la flechita, como por ejemplo cambiar la etiqueta de cada campo por una en español, así como indicar si el campo es obligatorio o no rellenarlo. Si necesitamos crear algún campo más podemos hacer clic en el icono&nbsp;<a href="https://danisanchez.net/wp-content/uploads/2017/07/011-1.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2854" src="https://danisanchez.net/wp-content/uploads/2017/07/011-1.jpg" alt="" width="35" height="33"></a>&nbsp;y añadir el tipo de campo que deseemos. Así quedaría el formulario con las etiquetas de los campos cambiadas:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/012-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="632" height="466" src="https://danisanchez.net/wp-content/uploads/2017/07/012.jpg" alt="" class="wp-image-2855" srcset="https://danisanchez.net/wp-content/uploads/2017/07/012.jpg 632w, https://danisanchez.net/wp-content/uploads/2017/07/012-300x221.jpg 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></a></figure></div>



<p class="wp-block-paragraph">Otro apartado muy interesante son los <strong>Extras,&nbsp;</strong>donde podemos configurar servicios adicionales que pueden repercutir en el coste final de la habitación, por ejemplo, un cargo por niño o adulto adicional, por un suplemento de cuna, por conexión WIFI, etc.</p>



<p class="wp-block-paragraph">Para configurarlo nos dirigimos al apartado <strong>Extras:</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/013-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="750" height="292" src="https://danisanchez.net/wp-content/uploads/2017/07/013.jpg" alt="" class="wp-image-2856" srcset="https://danisanchez.net/wp-content/uploads/2017/07/013.jpg 750w, https://danisanchez.net/wp-content/uploads/2017/07/013-300x117.jpg 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /></a></figure></div>



<p class="wp-block-paragraph">Por defecto tenemos configurados los extras: Adultos y Niños.</p>



<p class="wp-block-paragraph">Si desplegamos el extra Adultos, podemos configurar hasta cuántos adultos adicionales permitiría la habitación y el sobrecoste que ocasionaría:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/014-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="746" height="515" src="https://danisanchez.net/wp-content/uploads/2017/07/014.jpg" alt="" class="wp-image-2857" srcset="https://danisanchez.net/wp-content/uploads/2017/07/014.jpg 746w, https://danisanchez.net/wp-content/uploads/2017/07/014-300x207.jpg 300w" sizes="auto, (max-width: 746px) 100vw, 746px" /></a></figure></div>



<p class="wp-block-paragraph">Si no nos interesa añadir tantos, podemos eliminar campos hasta adaptarlo a nuestras necesidades. Lo mismo podemos hacer con la opción de niños.</p>



<p class="wp-block-paragraph">Aunque si no vamos a permitir alojar a más visitantes de los establecidos en la habitación, podemos eliminar ambos extras y crear uno propio, como por ejemplo, una cuna opcional en caso de que se hospeden una pareja con un bebé.</p>



<p class="wp-block-paragraph">Añadimos un nuevo extra haciendo clic en el icono&nbsp;<a href="https://danisanchez.net/wp-content/uploads/2017/07/011-1.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2854" src="https://danisanchez.net/wp-content/uploads/2017/07/011-1.jpg" alt="" width="35" height="33"></a>y lo llamamos, por ejemplo, cuna opcional:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/015-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="756" height="486" src="https://danisanchez.net/wp-content/uploads/2017/07/015.jpg" alt="" class="wp-image-2858" srcset="https://danisanchez.net/wp-content/uploads/2017/07/015.jpg 756w, https://danisanchez.net/wp-content/uploads/2017/07/015-300x193.jpg 300w" sizes="auto, (max-width: 756px) 100vw, 756px" /></a></figure>



<p class="wp-block-paragraph">Indicamos que si se añade una cuna a la habitación, el precio de esta se incrementará en 10,00€, todo esto configurado conforme a nuestras necesidades.</p>



<h2 class="wp-block-heading">Temas</h2>



<p class="wp-block-paragraph">En el apartado <strong>Themes, </strong>donde<strong>&nbsp;</strong>podemos personalizar algunos ajustes de nuestros calendarios:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/016-1.jpg" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="1098" height="278" src="https://danisanchez.net/wp-content/uploads/2017/07/016.jpg" alt="" class="wp-image-2860" srcset="https://danisanchez.net/wp-content/uploads/2017/07/016.jpg 1098w, https://danisanchez.net/wp-content/uploads/2017/07/016-300x76.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/016-1024x259.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/016-768x194.jpg 768w" sizes="auto, (max-width: 1098px) 100vw, 1098px" /></a></figure>



<p class="wp-block-paragraph">Hacemos clic en editar el tema. Los ajustes se dividen en varios apartados que veremos a continuación:</p>



<h3 class="wp-block-heading">Ajuste General</h3>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/017-1.jpg"><img loading="lazy" decoding="async" width="964" height="614" src="https://danisanchez.net/wp-content/uploads/2017/07/017.jpg" alt="" class="wp-image-2903" srcset="https://danisanchez.net/wp-content/uploads/2017/07/017.jpg 964w, https://danisanchez.net/wp-content/uploads/2017/07/017-300x191.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/017-768x489.jpg 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></a></figure>



<p class="wp-block-paragraph">Algunas opciones solo están disponibles si contamos con la versión Pro del plugin. Pero para la versión FREE, entre otras opciones podemos ajustar el formado de fecha que aparecerá en los calendarios, el formato de los días de la semana (completo o abreviado), seleccionar el día en el que comienza la semana (en algunos países la semana comienza en Domingo).</p>



<p class="wp-block-paragraph">Otra opción interesante es poder <strong>deshabilitar días fijos en la semana</strong>. Por ejemplo, si nuestro establecimiento cierra los Domingos, podemos hacer que todos los domingos se establezcan por defecto en «No disponible».</p>



<p class="wp-block-paragraph"><strong>Seleccionar múltiples días o un único día</strong>. Si el propósito del calendario de reservas es para alojamiento (hoteles, casas rurales, hostales&#8230;), es conveniente permitir al usuario poder seleccionar un rango de días, tantos como días quiera hospedarse. Pero si nuestro establecimiento es una peluquería, lo que nos interesa es que el cliente solo escoja un día en concreto.</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/018-1.jpg"><img loading="lazy" decoding="async" width="921" height="369" src="https://danisanchez.net/wp-content/uploads/2017/07/018.jpg" alt="" class="wp-image-2904" srcset="https://danisanchez.net/wp-content/uploads/2017/07/018.jpg 921w, https://danisanchez.net/wp-content/uploads/2017/07/018-300x120.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/018-768x308.jpg 768w" sizes="auto, (max-width: 921px) 100vw, 921px" /></a></figure>



<p class="wp-block-paragraph">Establecemos el nombre que queramos darle a los <strong>3 estados posibles</strong> dentro del calendario: disponible, reservado y no disponible.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/019-1.jpg"><img loading="lazy" decoding="async" width="710" height="277" src="https://danisanchez.net/wp-content/uploads/2017/07/019.jpg" alt="" class="wp-image-2905" srcset="https://danisanchez.net/wp-content/uploads/2017/07/019.jpg 710w, https://danisanchez.net/wp-content/uploads/2017/07/019-300x117.jpg 300w" sizes="auto, (max-width: 710px) 100vw, 710px" /></a></figure></div>



<p class="wp-block-paragraph">Entre otros ajustes generales, podemos especificar el tipo de moneda con el que trabajaremos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/020-1.jpg"><img loading="lazy" decoding="async" width="718" height="147" src="https://danisanchez.net/wp-content/uploads/2017/07/020.jpg" alt="" class="wp-image-2906" srcset="https://danisanchez.net/wp-content/uploads/2017/07/020.jpg 718w, https://danisanchez.net/wp-content/uploads/2017/07/020-300x61.jpg 300w" sizes="auto, (max-width: 718px) 100vw, 718px" /></a></figure></div>



<h2 class="wp-block-heading">Notificaciones</h2>



<p class="wp-block-paragraph">En este apartado podremos configurar las notificaciones que serán enviadas por correo electrónico, tanto al administrador del sitio web, como al usuario que está realizando la reserva. Para ello es importante habilitar la opción <strong>PHPMailer</strong> en caso de que no tengamos configurado un sistema de envío de correo alternativo dentro de nuestro sitio web.</p>



<p class="wp-block-paragraph">Las notificaciones podrían clasificarse:</p>



<p class="wp-block-paragraph"><strong>&#8211; Notificaciones al administrador:</strong></p>



<ul class="wp-block-list"><li>Mensaje de solicitud de reserva recibida.</li><li>Mensaje de solicitud de reserva aprobada.</li></ul>



<p class="wp-block-paragraph"><strong>&#8211; Notificaciones al usuario:</strong></p>



<ul class="wp-block-list"><li>Mensaje de solicitud de reserva recibida.</li><li>Mensaje de solicitud de reserva aprobada.</li><li>Mensaje de solicitud de reserva cancelada.</li></ul>



<p class="wp-block-paragraph">Por ejemplo, si queremos crear una notificación cada vez que un usuario envíe una solicitud de reserva podemos configurarla así de fácil (<strong>importante que Notify on book request esté activado</strong>):</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/021-1-2.jpg"><img loading="lazy" decoding="async" width="744" height="506" src="https://danisanchez.net/wp-content/uploads/2017/07/021-1-1.jpg" alt="" class="wp-image-2908" srcset="https://danisanchez.net/wp-content/uploads/2017/07/021-1-1.jpg 744w, https://danisanchez.net/wp-content/uploads/2017/07/021-1-1-300x204.jpg 300w" sizes="auto, (max-width: 744px) 100vw, 744px" /></a></figure>



<p class="wp-block-paragraph">O si queremos enviar una notificación para informar de que hemos aprobado su solicitud de reserva:&nbsp;<strong>(importante que Notify when reservation is approved esté activada):</strong></p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/022-1.jpg"><img loading="lazy" decoding="async" width="712" height="493" src="https://danisanchez.net/wp-content/uploads/2017/07/022.jpg" alt="" class="wp-image-2909" srcset="https://danisanchez.net/wp-content/uploads/2017/07/022.jpg 712w, https://danisanchez.net/wp-content/uploads/2017/07/022-300x208.jpg 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></a></figure>



<h2 class="wp-block-heading">Textos por defecto</h2>



<p class="wp-block-paragraph">En este apartado podemos cambiar alguno de los textos por defecto del plugin para adaptarlos a nuestro idioma y necesidades. También nos da a elegir usar directamente el archivo de traducción .mo en caso de estar disponible (si no sabéis traducir archivos .mo, aconsejo modificar los textos directamente en este apartado).</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://danisanchez.net/wp-content/uploads/2017/07/023-1.jpg"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2017/07/023-1.jpg" alt="" class="wp-image-2910"/></a></figure></div>



<h2 class="wp-block-heading">Terminando nuestro sistema de reservas.</h2>



<p class="wp-block-paragraph">Para insertar el calendario en una página de nuestro sitio web, primero nos dirigimos al listado de calendarios que tenemos creados y copiamos su Shortcode:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/024-1.jpg"><img loading="lazy" decoding="async" width="1166" height="381" src="https://danisanchez.net/wp-content/uploads/2017/07/024.jpg" alt="" class="wp-image-2911" srcset="https://danisanchez.net/wp-content/uploads/2017/07/024.jpg 1166w, https://danisanchez.net/wp-content/uploads/2017/07/024-300x98.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/024-1024x335.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/024-768x251.jpg 768w" sizes="auto, (max-width: 1166px) 100vw, 1166px" /></a></figure></div>



<p class="wp-block-paragraph">Nos dirigimos a la página donde queremos insertarlo y lo pegamos:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/025-1.jpg"><img loading="lazy" decoding="async" width="1314" height="653" src="https://danisanchez.net/wp-content/uploads/2017/07/025.jpg" alt="" class="wp-image-2912" srcset="https://danisanchez.net/wp-content/uploads/2017/07/025.jpg 1314w, https://danisanchez.net/wp-content/uploads/2017/07/025-300x149.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/025-1024x509.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/025-768x382.jpg 768w" sizes="auto, (max-width: 1314px) 100vw, 1314px" /></a></figure>



<p class="wp-block-paragraph">Y aquí tenemos el resultado:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/026-1.jpg"><img loading="lazy" decoding="async" width="1263" height="863" src="https://danisanchez.net/wp-content/uploads/2017/07/026.jpg" alt="" class="wp-image-2913" srcset="https://danisanchez.net/wp-content/uploads/2017/07/026.jpg 1263w, https://danisanchez.net/wp-content/uploads/2017/07/026-300x205.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/026-1024x700.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/026-768x525.jpg 768w" sizes="auto, (max-width: 1263px) 100vw, 1263px" /></a></figure>



<p class="wp-block-paragraph">Ahora si un usuario desea reservar por ejemplo el fin de semana del 29-30 de Julio, solo tiene que seleccionar los días en el calendario y rellenar el formulario con sus datos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/027-1.jpg"><img loading="lazy" decoding="async" width="704" height="816" src="https://danisanchez.net/wp-content/uploads/2017/07/027.jpg" alt="" class="wp-image-2914" srcset="https://danisanchez.net/wp-content/uploads/2017/07/027.jpg 704w, https://danisanchez.net/wp-content/uploads/2017/07/027-259x300.jpg 259w" sizes="auto, (max-width: 704px) 100vw, 704px" /></a></figure></div>



<p class="wp-block-paragraph">En el momento que pulse en <strong>Reservar ahora</strong>, si hemos activado las notificaciones, se enviará un aviso al administrador para que compruebe el panel de control de reservas y decida si aprueba o cancela la solicitud. Así mismo también se enviará una notificación al usuario si la hemos configurado previamente.</p>



<p class="wp-block-paragraph">Vamos al apartado <strong>Reservations</strong> dentro de Booking Calendar y veremos que tenemos una nueva solicitud para el calendario de Habitación doble:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/028-1.jpg"><img loading="lazy" decoding="async" width="1085" height="350" src="https://danisanchez.net/wp-content/uploads/2017/07/028.jpg" alt="" class="wp-image-2915" srcset="https://danisanchez.net/wp-content/uploads/2017/07/028.jpg 1085w, https://danisanchez.net/wp-content/uploads/2017/07/028-300x97.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/028-1024x330.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/028-768x248.jpg 768w" sizes="auto, (max-width: 1085px) 100vw, 1085px" /></a></figure>



<p class="wp-block-paragraph">Para ver los detalles de la reserva seleccionamos el calendario <strong>Habitación doble</strong> y expandimos la pestaña de <strong>Details</strong> dentro de Reservation information:</p>



<figure class="wp-block-image size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/029-1.jpg"><img loading="lazy" decoding="async" width="1549" height="717" src="https://danisanchez.net/wp-content/uploads/2017/07/029.jpg" alt="" class="wp-image-2916" srcset="https://danisanchez.net/wp-content/uploads/2017/07/029.jpg 1549w, https://danisanchez.net/wp-content/uploads/2017/07/029-300x139.jpg 300w, https://danisanchez.net/wp-content/uploads/2017/07/029-1024x474.jpg 1024w, https://danisanchez.net/wp-content/uploads/2017/07/029-768x355.jpg 768w, https://danisanchez.net/wp-content/uploads/2017/07/029-1536x711.jpg 1536w" sizes="auto, (max-width: 1549px) 100vw, 1549px" /></a></figure>



<p class="wp-block-paragraph">Desde aquí podemos aprobar o rechazar la solicitud.</p>



<p class="wp-block-paragraph">Si todo es correcto le datos a <strong>Approve y&nbsp;</strong>en ese momento, si hemos configurado las notificaciones, se enviará un e-mail al cliente confirmando su solicitud y automáticamente los días reservados se reflejarán en el calendario en rojo:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><a href="https://danisanchez.net/wp-content/uploads/2017/07/030-1.jpg"><img loading="lazy" decoding="async" width="698" height="567" src="https://danisanchez.net/wp-content/uploads/2017/07/030.jpg" alt="" class="wp-image-2917" srcset="https://danisanchez.net/wp-content/uploads/2017/07/030.jpg 698w, https://danisanchez.net/wp-content/uploads/2017/07/030-300x244.jpg 300w" sizes="auto, (max-width: 698px) 100vw, 698px" /></a></figure></div>



<p class="wp-block-paragraph">Como nota final, decir que hay algunos aspectos que no se han podido configurar desde las opciones del plugin, como por ejemplo, el nombre de los meses del año o los días de la semana que siguen apareciendo en inglés (o yo no he dado con la opción).</p>



<p class="wp-block-paragraph">Para cambiar esto, os aconsejo editar directamente el archivo de traducción del plugin. Podéis echar un vistazo a un artículo que escribí hace tiempo sobre <strong><a href="https://danisanchez.net/traduce-tus-plugins-de-wordpress-de-forma-sencilla-con-loco-translate/">Loco Translate</a></strong>, que permite traducir fácilmente plugins y temas de WordPress.</p>



<p class="wp-block-paragraph">Espero que os haya resultado interesante y si os ha gustado lo compartáis y dejéis vuestros comentarios.</p>



<p class="wp-block-paragraph">¡Un&nbsp;saludo!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/crear-un-sistema-de-reservas-on-line-para-wordpress/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Evita el SPAM en tus formularios web con reCAPTCHA y Ninja Forms</title>
		<link>https://danisanchez.net/integrar-recaptcha-en-wordpress-con-ninja-forms/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 21 Jun 2016 06:40:12 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[formularios]]></category>
		<category><![CDATA[ninja forms]]></category>
		<category><![CDATA[recaptcha]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://www.gestionatuweb.net/?p=838</guid>

					<description><![CDATA[Siempre estaremos expuestos a los molestos robots de SPAM que se dedican a rastrear formularios por toda la RED para enviar su publicidad a través de nuestros formularios web. Peores son los que atacan formularios de registro intentando los temidos ataques de SQL Injection, intentando inyectar código malicioso, ya que los formularios de registro suelen [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Siempre estaremos expuestos a los molestos robots de SPAM que se dedican a rastrear formularios por toda la RED para enviar su publicidad a través de nuestros formularios web.</p>



<p class="wp-block-paragraph">Peores son los que atacan formularios de registro intentando los temidos ataques de <strong>SQL Injection</strong>, intentando inyectar código malicioso, ya que los formularios de registro suelen conectar con la base de datos para guardar la información.</p>



<p class="wp-block-paragraph">La Captcha surgió como una capa de seguridad para intentar que los robots no pudieran enviar formularios por si mismos, y requerían que el usuario realizara una acción intermedia, como escribir un texto o número visual que los robots no son capaces de descifrar. A veces ni nosotros somos capaces de descifrar.</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/killcaptcha-1.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/killcaptcha-1.jpg" alt="Ejemplo de Captcha" class="wp-image-839"/></a></figure>



<p class="wp-block-paragraph">Para ello Google ha sacado su propio sistema de Captcha, al que llama reCaptcha, consistente en activar una única casilla «Check». Tras activar dicha casilla, reCaptcha hará las comprobaciones oportunas para asegurarse de que ha sido una persona humana la que está intentando enviar el formulario.</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/nocaptcha.gif"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/nocaptcha.gif" alt="nocaptcha" class="wp-image-840"/></a></figure>



<p class="wp-block-paragraph">Vamos a ver cómo integrar reCapcha en nuestros formularios creados con Ninja Forms, el plugins para formularios que usamos en nuestro <a href="https://danisanchez.net/curso-de-wordpress/" target="_blank" rel="noreferrer noopener">Curso de WordPress</a>.</p>



<p class="wp-block-paragraph">Lo primero que haremos es registrarnos en la web de reCaptcha con una cuenta de Google:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/recaptcha.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/recaptcha.jpg" alt="Web reCAPTCHA" class="wp-image-841"/></a></figure>



<p class="wp-block-paragraph">Hacemos clic en Get reCAPCHA y aparecerá el formulario para registrar una nueva web:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/formulario.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/formulario.jpg" alt="Formulario de registro de web" class="wp-image-842"/></a></figure>



<p class="wp-block-paragraph">Introducimos un nombre para la cuenta y la url de la web que queremos enlazar con reCAPTCHA:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/formulario2.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/formulario2.jpg" alt="Registrar sitio nuevo en recaptcha" class="wp-image-843"/></a></figure>



<p class="wp-block-paragraph">Y pulsamos en registro. Lo que nos interesa es conocer las claves que reCAPTCHA nos ha generado para asociar nuestros formularios, por lo que desplegamos el menú de Claves para acceder a ellas:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/formulario3.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/formulario3.jpg" alt="Acceder a las claves de recaptcha" class="wp-image-845"/></a></figure>



<p class="wp-block-paragraph">Necesitamos tener a mano la <strong>Clave del sitio</strong> y la <strong>Clave secreta</strong>, que usaremos&nbsp;para configurar el plugin de reCAPTCHA para Ninja Forms.</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/claves.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/claves.jpg" alt="Ver las claves de recaptcha" class="wp-image-846"/></a></figure>



<p class="wp-block-paragraph">Vamos a plugins de WordPress y buscamos <strong>Ninja Forms reCAPCHA</strong>:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/instalar_plugin_recaptcha.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/instalar_plugin_recaptcha.jpg" alt="Buscar plugin recaptcha de ninja forms" class="wp-image-847"/></a></figure>



<p class="wp-block-paragraph">Instalamos y activamos el plugins y ahora en el menú <strong>Formularios&nbsp;</strong>aparecerá una nueva opción para configurar reCAPTCHA:</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/Menu-Formulario-Recaptcha.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/Menu-Formulario-Recaptcha.jpg" alt="Menú formularios recaptcha" class="wp-image-848"/></a></figure>



<p class="wp-block-paragraph">Accedemos al menú reCAPTCHA, y rellenamos la clave de sitio y clave secreta que nos generó la web de reCAPTCHA. También podemos especificar el código de lenguaje para que muestra el texto «No soy un robot» en el idioma deseado. El código para que aparezca en español: «es», y para inglés: «en».</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/configurar_recaptcha.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/configurar_recaptcha.jpg" alt="Introducir las claves de recaptcha en el plugin" class="wp-image-849"/></a></figure>



<p class="wp-block-paragraph">Guardamos los cambios y vamos a la configuración de nuestro formulario para añadir el nuevo campo reCAPTCHA.</p>



<p class="wp-block-paragraph">Añadimos el campo reCAPTCHA y lo colocamos justo antes del botón de enviar el formulario. En Etiqueta podemos personalizar el texto, por ejemplo «Activa la casilla de seguridad».</p>



<figure class="wp-block-image"><a href="https://danisanchez.net/wp-content/uploads/2016/06/anadir_recapcha.jpg" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2016/06/anadir_recapcha.jpg" alt="Añadir campo recaptcha en el formulario web" class="wp-image-850"/></a></figure>



<p class="wp-block-paragraph">Guardamos el formulario y ¡listo!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
