<?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>publicaciones &#8211; danisanchez.net</title>
	<atom:link href="https://danisanchez.net/tag/publicaciones/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Tue, 11 Aug 2020 12:25:08 +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>publicaciones &#8211; danisanchez.net</title>
	<link>https://danisanchez.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tutorial básico Kdenlive, el editor de vídeo libre de la comunidad KDE</title>
		<link>https://danisanchez.net/tutorial-basico-kdenlive-el-editor-de-video-libre-de-la-comunidad-kde/</link>
					<comments>https://danisanchez.net/tutorial-basico-kdenlive-el-editor-de-video-libre-de-la-comunidad-kde/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 11 Aug 2020 12:25:08 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[kdenlive]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6892</guid>

					<description><![CDATA[Una de las joyas de la corona de la comunidad KDE es su editor de vídeo no linear Kdenlive, que con cada nueva actualización crece y mejora hasta situarse a la altura de otras soluciones comerciales. Kdenlive es la aplicación con la que edito todos mis vídeos de Youtube desde que en Febrero de 2018 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Una de las joyas de la corona de la comunidad KDE es su editor de vídeo no linear <strong>Kdenlive</strong>, que con cada nueva actualización crece y mejora hasta situarse a la altura de otras soluciones comerciales.</p>



<p class="wp-block-paragraph">Kdenlive es la aplicación con la que edito todos mis vídeos de Youtube desde que en Febrero de 2018 me pasé completamente a GNU/Linux. </p>



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



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



<p class="wp-block-paragraph">No soy ningún experto en edición de vídeo, ni siquiera aficionado, pero creo que con lo aprendido hasta ahora puedo facilitarle el camino a alguien que necesite, como yo, <strong>editar vídeos sencillos</strong>, añadir audios, crear transiciones, cortar silencios, pegar pistas, exportar en un formato adecuado, etc.</p>



<p class="wp-block-paragraph">Es el tutorial que yo hubiese querido tener cuando empecé a «cacharrear» con el editor y que me llevó a consultar en numerosos blogs y videotutoriales para cada herramienta o efecto que necesitaba aplicar.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Artículo disponible en vídeo</p></blockquote>



<iframe width="100%" height="315" src="https://www.youtube-nocookie.com/embed/6RahOEyvz70" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>



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



<h2 class="wp-block-heading">Cómo conseguir Kdenlive</h2>



<p class="wp-block-paragraph">Kdenlive es multiplataforma, tienes instaladores tanto para GNU/Linux, Windows o Mac OS. Aunque en este artículo nos centraremos en las versiones para GNU/Linux.</p>



<p class="wp-block-paragraph">La mejor forma de tener Kdenlive es usar una distribucion GNU/Linux con <strong>entorno de escritorio KDE Plasma</strong>, pues este integra todas las librerías necesarias para hacer funcionar las versiones más recientes del editor. </p>



<p class="wp-block-paragraph">También es conveniente que la distribución no sea muy conservadora (como Debian), ya que Kdenlive tuvo una importante actualización a partir de la versión 19 (en el momento de escribir este artículo está en su versión 20.04), mejorando considerablemente la experiencia con la línea de tiempo y la estabilidad general de la aplicación. <strong>Algunas distros como Debian 10 KDE o Kubuntu 18.04 aún conservan en sus repositorios la versión anterior</strong>.</p>



<p class="wp-block-paragraph">Si no usas Plasma, la mejor recomendación es que instales Kdenlive desde;</p>



<ul class="wp-block-list"><li><strong>Snap</strong> para Ubuntu y derivadas.</li><li><strong>Flatpak</strong> o <strong>AppImage</strong> para cualquier otra distro.</li></ul>



<h3 class="wp-block-heading">Descargar Kdenlive desde su web oficial como APPImage</h3>



<figure class="wp-block-image size-large"><a href="https://kdenlive.org/es/descargar/" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2020/08/01-kdenlive-descargas-1024x279.jpg" alt="Opciones de descarga Kdenlive" class="wp-image-6893" title="Opciones de descarga Kdenlive"/></a></figure>



<h3 class="wp-block-heading">Descargar Kdenlive desde FlatHub como Flatpak</h3>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://flathub.org/apps/details/org.kde.kdenlive" target="_blank" rel="noopener noreferrer"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2020/08/02.kdenlive-flatpak.jpg" alt="" class="wp-image-6894"/></a></figure></div>



<h2 class="wp-block-heading">Interfaz de Kdenlive</h2>



<p class="wp-block-paragraph">Podemos dividir la interfaz de Kdenlive en 5 grupos principales:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2020/08/03.kdenlive-interfaz-1024x553.jpg" alt="Interfaz de Kdenlive" class="wp-image-6896" title="Interfaz de Kdenlive"/></figure>



<ul class="wp-block-list"><li><strong>Recursos del proyecto</strong>: Vídeos, audios e imágenes que compondrán el montaje.</li><li><strong>Efectos activos:</strong> Efectos aplicados a las pistas. Desde aquí se pueden configurar sus parámetros.</li><li><strong>Librería de efectos: </strong>Efectos disponibles tanto de imagen como de audio.</li><li><strong>Previsualización:</strong> Podemos ver en tiempo real los cambios aplicados antes de renderizar el vídeo final.</li><li><strong>Línea de tiempo:</strong> Donde añadimos las pistas de vídeo y audio, aplicamos los efectos, cortamos, pegamos, etc.</li></ul>



<h2 class="wp-block-heading">Lo primero al empezar un nuevo proyecto</h2>



<p class="wp-block-paragraph">La ventana de diálogo al crear un nuevo proyecto nos preguntará la <strong>resolución</strong> y <strong>tasa de FPS</strong> (fotogramas por segundo) que vamos a necesitar. También nos permite definir el número de pistas de video y de audio con los que se iniciará el proyecto.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="733" height="613" src="https://danisanchez.net/wp-content/uploads/2020/08/04-kdenlive-opciones-nuevo-proyecto.jpg" alt="Kdenlive, opciones nuevo proyecto" class="wp-image-8980" srcset="https://danisanchez.net/wp-content/uploads/2020/08/04-kdenlive-opciones-nuevo-proyecto.jpg 733w, https://danisanchez.net/wp-content/uploads/2020/08/04-kdenlive-opciones-nuevo-proyecto-300x251.jpg 300w" sizes="(max-width: 733px) 100vw, 733px" /></figure>



<p class="wp-block-paragraph">Lo ideal es escoger la misma resolución y tasa de fotogramas que la fuente de vídeo original. Si la fuente original tiene una resolución de 1280&#215;720 y hacemos el proyecto a 1920&#215;1080, seguramente la imagen acabe pixelada o borrosa. Del mismo modo, si la fuente original está grabada a 24 FPS y configuramos el proyecto a 60 FPS, el resultado final se seguirá viendo a 24 FPS.</p>



<h2 class="wp-block-heading">Añadir recursos al proyecto</h2>



<p class="wp-block-paragraph">Ahora que ya hemos definido la configuración inicial vamos a añadir los fragmentos de vídeo, audio e imágenes que formarán el montaje final.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="460" height="530" src="https://danisanchez.net/wp-content/uploads/2020/08/05-kdenlive-anadir-recursos.jpg" alt="Kdenlive - Añadir recursos al proyecto" class="wp-image-8982" srcset="https://danisanchez.net/wp-content/uploads/2020/08/05-kdenlive-anadir-recursos.jpg 460w, https://danisanchez.net/wp-content/uploads/2020/08/05-kdenlive-anadir-recursos-260x300.jpg 260w" sizes="auto, (max-width: 460px) 100vw, 460px" /></figure></div>



<p class="wp-block-paragraph">Para este proyecto he añadido <strong>dos clips de vídeo</strong> y <strong>dos clips de audio</strong>, que son los audios originales de los clips de vídeo pero procesados por separado con <a rel="noreferrer noopener" href="https://www.audacityteam.org/" target="_blank">Audacity</a> para mejorar la ecualización y ganancia.</p>



<p class="wp-block-paragraph">Entonces el objetivo es, silenciar el audio incrustado en el vídeo y sustituirlo por el audio procesado.</p>



<p class="wp-block-paragraph">Para ello arrastramos el primer clip de vídeo hacia una de las pistas de vídeo:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="914" height="870" src="https://danisanchez.net/wp-content/uploads/2020/08/06-kdenlive-insertar-pista.jpg" alt="" class="wp-image-8984" srcset="https://danisanchez.net/wp-content/uploads/2020/08/06-kdenlive-insertar-pista.jpg 914w, https://danisanchez.net/wp-content/uploads/2020/08/06-kdenlive-insertar-pista-300x286.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/08/06-kdenlive-insertar-pista-768x731.jpg 768w" sizes="auto, (max-width: 914px) 100vw, 914px" /></figure>



<p class="wp-block-paragraph">Automáticamente se rellena una de las pistas de audio, debido al audio que ya hay incrustado en el clip de vídeo. Así que prodecemos a silenciarlo.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="714" height="289" src="https://danisanchez.net/wp-content/uploads/2020/08/07-kdenlive-silenciar-pista.jpg" alt="Kdenlive, silenciar pista" class="wp-image-8985" srcset="https://danisanchez.net/wp-content/uploads/2020/08/07-kdenlive-silenciar-pista.jpg 714w, https://danisanchez.net/wp-content/uploads/2020/08/07-kdenlive-silenciar-pista-300x121.jpg 300w" sizes="auto, (max-width: 714px) 100vw, 714px" /></figure>



<p class="wp-block-paragraph">Ahora arrastramos el clip de audio procesado a la siguiente pista de audio:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="881" height="875" src="https://danisanchez.net/wp-content/uploads/2020/08/08-kdenlive-insertar-pista-audio.jpg" alt="Kdenlive, añadir clip de audio" class="wp-image-8986" srcset="https://danisanchez.net/wp-content/uploads/2020/08/08-kdenlive-insertar-pista-audio.jpg 881w, https://danisanchez.net/wp-content/uploads/2020/08/08-kdenlive-insertar-pista-audio-300x298.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/08/08-kdenlive-insertar-pista-audio-150x150.jpg 150w, https://danisanchez.net/wp-content/uploads/2020/08/08-kdenlive-insertar-pista-audio-768x763.jpg 768w" sizes="auto, (max-width: 881px) 100vw, 881px" /></figure>



<h2 class="wp-block-heading">Edición de pistas</h2>



<p class="wp-block-paragraph">Una de las tareas más comunes a la hora de editar un vídeo es la de eliminar silencios o fragmentos que han quedado mal. Para ello vamos a estar haciendo un uso frecuente de la herramienta de Corte así que mejor nos vamos quedando con su atajo de teclado (X):</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="148" height="40" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-1.png" alt="" class="wp-image-8989"/></figure></div>



<p class="wp-block-paragraph">Vamos a localizar fragmentos de silencio, son fácil de detectar si nos fijamos en la onda de la pista de audio. Para ayudarnos podemos hacer zoom en la línea de tiempo con el deslizador o pulsando Ctrl + rueda del ratón.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="444" src="https://danisanchez.net/wp-content/uploads/2020/08/09-kdenlive-aplicar-zoom-pista-1024x444.jpg" alt="Kdenlive, aplicar zoom a la línea de tiempo" class="wp-image-8990" srcset="https://danisanchez.net/wp-content/uploads/2020/08/09-kdenlive-aplicar-zoom-pista-1024x444.jpg 1024w, https://danisanchez.net/wp-content/uploads/2020/08/09-kdenlive-aplicar-zoom-pista-300x130.jpg 300w, https://danisanchez.net/wp-content/uploads/2020/08/09-kdenlive-aplicar-zoom-pista-768x333.jpg 768w, https://danisanchez.net/wp-content/uploads/2020/08/09-kdenlive-aplicar-zoom-pista.jpg 1070w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">A la hora de hacer un corte en una pista, debemos tener en cuenta que <strong>estamos trabajando con 2 pistas independientes</strong> (vídeo y audio) y si aplicamos el recorte solamente a la pista de video, el audio se desincronizará.</p>



<p class="wp-block-paragraph">En estos casos lo ideal es agrupar ambas pistas para que el corte se aplique a las dos a la vez en el mismo fotograma y tiempo. Para ello vamos a hacer uso de la <strong>herramienta de Selección (S)</strong>, pinchamos en la pista de vídeo, mantenemos pulsada la tecla SHIFT y pinchamos en la pista de audio para seleccionar ambas:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="931" height="329" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-2.png" alt="" class="wp-image-8991" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-2.png 931w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-2-300x106.png 300w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-2-768x271.png 768w" sizes="auto, (max-width: 931px) 100vw, 931px" /></figure>



<p class="wp-block-paragraph">Con las pistas seleccionadas, hacemos <strong>Clic Derecho &#8211; Agrupar Clips</strong> o el atajo de teclado <strong>Ctrl + G</strong>. Ahora el corte que apliquemos en el clip de vídeo, cortará también en el clip de audio.</p>



<p class="wp-block-paragraph">Vamos a posicionarnos en el silencio y hacemos un corte al principio y otro corte al final.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="515" height="325" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-3.png" alt="Kdenlive, cortar pista" class="wp-image-8992" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-3.png 515w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-3-300x189.png 300w" sizes="auto, (max-width: 515px) 100vw, 515px" /></figure></div>



<p class="wp-block-paragraph">Ahora podemos eliminar el trozo seleccionado con <strong>Clic Derecho &#8211; Borrar elemento seleccionado</strong>, o simplemente pulsando la tecla <strong>Supr</strong> (<em>¿a que los atajos de teclado son más rápidos y cómodos?</em>)</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="488" height="300" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-4.png" alt="Kdenlive, eliminar fragmento de pista" class="wp-image-8993" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-4.png 488w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-4-300x184.png 300w" sizes="auto, (max-width: 488px) 100vw, 488px" /></figure></div>



<p class="wp-block-paragraph">Ahora podemos arrastrar la pista derecha y unirla con la izquierda para que no se note el corte.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="434" height="278" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-5.png" alt="Kdenlive, arrastrar pistas" class="wp-image-8994" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-5.png 434w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-5-300x192.png 300w" sizes="auto, (max-width: 434px) 100vw, 434px" /></figure></div>



<h2 class="wp-block-heading">Transiciones entre pistas</h2>



<p class="wp-block-paragraph">Cuando tenemos varios clips de vídeo para el montaje final, una práctica habitual es la de hacer transiciones entre clips.</p>



<p class="wp-block-paragraph">Primero añadimos el segundo clip a la pista de video a continuación del que ya hemos editado:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="848" height="871" src="https://danisanchez.net/wp-content/uploads/2020/08/10-kdenlive-anadir-pistas-consecutivas.jpg" alt="Kdenlive, añadir pistas a la línea de tiempo" class="wp-image-8995" srcset="https://danisanchez.net/wp-content/uploads/2020/08/10-kdenlive-anadir-pistas-consecutivas.jpg 848w, https://danisanchez.net/wp-content/uploads/2020/08/10-kdenlive-anadir-pistas-consecutivas-292x300.jpg 292w, https://danisanchez.net/wp-content/uploads/2020/08/10-kdenlive-anadir-pistas-consecutivas-768x789.jpg 768w" sizes="auto, (max-width: 848px) 100vw, 848px" /></figure>



<p class="wp-block-paragraph">Y lo arrastramos para unirlo:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="601" height="285" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-6.png" alt="" class="wp-image-8996" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-6.png 601w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-6-300x142.png 300w" sizes="auto, (max-width: 601px) 100vw, 601px" /></figure>



<p class="wp-block-paragraph">Para realizar la transición, vamos a aplicar un efecto de fundido tanto al final del clip anterior, como al principio del nuevo clip.</p>



<p class="wp-block-paragraph">Buscamos en la zona de efectos: <strong>Fundido saliente</strong>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="637" height="516" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-7.png" alt="" class="wp-image-8997" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-7.png 637w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-7-300x243.png 300w" sizes="auto, (max-width: 637px) 100vw, 637px" /></figure>



<p class="wp-block-paragraph">Y lo arrastramos en el final del clip anterior:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="933" height="868" src="https://danisanchez.net/wp-content/uploads/2020/08/arrastrar-efecto-fundido-saliente.gif" alt="Kdenlive - Arrastrar efecto hacia clip" class="wp-image-8998"/></figure>



<p class="wp-block-paragraph">Si seleccionamos la pista en la que hemos aplicado el efecto, veremos sus propiedades en la <strong>zona de efectos activos</strong> (recordar que en esta zona aparecen todos los efectos aplicados al clip seleccionado):</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="467" height="187" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-8.png" alt="" class="wp-image-9000" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-8.png 467w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-8-300x120.png 300w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure></div>



<p class="wp-block-paragraph">Por defecto, el fundido saliente tiene una duración de 3 segundos, vamos a reducirlo a 1 segundo para que la transición sea más rápida.</p>



<p class="wp-block-paragraph">Ahora vamos a localizar el efecto <strong>Fundido entrante</strong> y lo arrastramos al inicio del nuevo clip:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="845" src="https://danisanchez.net/wp-content/uploads/2020/08/arrastrar-efecto-fundido-entrante-1024x845.gif" alt="" class="wp-image-9001" srcset="https://danisanchez.net/wp-content/uploads/2020/08/arrastrar-efecto-fundido-entrante-1024x845.gif 1024w, https://danisanchez.net/wp-content/uploads/2020/08/arrastrar-efecto-fundido-entrante-300x248.gif 300w, https://danisanchez.net/wp-content/uploads/2020/08/arrastrar-efecto-fundido-entrante-768x634.gif 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure></div>



<p class="wp-block-paragraph">Al igual que con el fundido saliente, vamos a reducir su duración a 1 segundo:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="467" height="194" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-9.png" alt="" class="wp-image-9003" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-9.png 467w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-9-300x125.png 300w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure></div>



<p class="wp-block-paragraph">Y ya tenemos terminada la transición:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="809" height="814" src="https://danisanchez.net/wp-content/uploads/2020/08/efecto-transicion.gif" alt="Kdenlive - Efecto transición" class="wp-image-9007"/></figure>



<h2 class="wp-block-heading">Añadir música de fondo</h2>



<p class="wp-block-paragraph">Si queremos añadir una música de fondo para amenizar el vídeo, podemos añadir una nueva pista de audio. Para ello vamos al <strong>Menú &#8211; Línea de Tiempo &#8211; Pistas &#8211; Insertar Pista</strong>.</p>



<p class="wp-block-paragraph">O también podemos posicionarnos sobre una pista existente y <strong>Clic Derecho &#8211; Insertar Pista</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="591" height="206" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-10.png" alt="Kdenlive - Insertar pista" class="wp-image-9009" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-10.png 591w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-10-300x105.png 300w" sizes="auto, (max-width: 591px) 100vw, 591px" /></figure>



<p class="wp-block-paragraph">Seleccionamos pista de audio y la posicionamos a continuación.</p>



<p class="wp-block-paragraph">Agregamos el audio musical a los recursos del proyecto y lo arrastramos a su nueva pista:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="792" height="925" src="https://danisanchez.net/wp-content/uploads/2020/08/11-kdenlive-arrastrar-clip-pista.jpg" alt="Kdenlive - Arrastrar clip a línea de tiempo" class="wp-image-9010" srcset="https://danisanchez.net/wp-content/uploads/2020/08/11-kdenlive-arrastrar-clip-pista.jpg 792w, https://danisanchez.net/wp-content/uploads/2020/08/11-kdenlive-arrastrar-clip-pista-257x300.jpg 257w, https://danisanchez.net/wp-content/uploads/2020/08/11-kdenlive-arrastrar-clip-pista-768x897.jpg 768w" sizes="auto, (max-width: 792px) 100vw, 792px" /></figure>



<p class="wp-block-paragraph">Cuando tenemos varias pistas de audio, seguramente necesitemos ajustar los volúmenes para que la pista de música no destaque sobre la pista de voz. Para ello podemos lanzar el <strong>panel mezclador</strong>.</p>



<h3 class="wp-block-heading">Ajustar volúmenes de pistas</h3>



<p class="wp-block-paragraph">Para lanzar el panel mezclador, nos dirigimos al <strong>Menú &#8211; Ver &#8211; Mezclador de Audio</strong>:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="381" height="541" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-11.png" alt="" class="wp-image-9011" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-11.png 381w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-11-211x300.png 211w" sizes="auto, (max-width: 381px) 100vw, 381px" /></figure></div>



<p class="wp-block-paragraph">En él veremos las 4 pistas principales de audio:</p>



<ul class="wp-block-list"><li>La primera que está silenciada (audio del vídeo original).</li><li>La segunda con el audio procesado.</li><li>La tercera con la música de fondo.</li><li>La cuarta que es la pista maestra y afecta a todas.</li></ul>



<p class="wp-block-paragraph">Podemos jugar con los deslizadores, bajando o subiendo el volumen de cada pista hasta dejarlo como deseamos (sin pasarse con los volúmenes altos para evitar distorsiones).</p>



<h2 class="wp-block-heading">Exportar el resultado final</h2>



<p class="wp-block-paragraph">Una vez que hemos terminado de editar las pistas, llega el momento de exportar el trabajo final. Para ello vamos a darle al botón rojo <strong>Procesar</strong>, donde nos va a pedir:</p>



<ul class="wp-block-list"><li>Ruta de la exportación.</li><li>Formato de vídeo final.</li></ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="846" height="773" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-12.png" alt="" class="wp-image-9013" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-12.png 846w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-12-300x274.png 300w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-12-768x702.png 768w" sizes="auto, (max-width: 846px) 100vw, 846px" /></figure>



<p class="wp-block-paragraph">A mí me gusta el formato <strong>WebM</strong>, es un formato de vídeo líbre y está pensado sobre todo para el vídeo streaming (es un buen formato para Youtube, Vimeo y generalmente cualquier plataforma de video-streaming). Pero si lo necesitas, también puedes exportar en formato MP4 o MPEG.</p>



<p class="wp-block-paragraph">Llegados a este punto tendremos dos opciones: <strong>Procesar a un archivo</strong> directamente o <strong>generar un script</strong>.</p>



<p class="wp-block-paragraph">Si solo tenemos que exportar un único video (proyecto), podemos <strong>procesar a un archivo </strong>directamente. Normalmente el tiempo de exportado (renderizado) dependerá de la duración del proyecto, de los efectos aplicados y de la conversión o reescalado (si tiene que procesar la resolución de la fuente original a una nueva) y por supuesto, de la capacidad de tu CPU.</p>



<p class="wp-block-paragraph">Para el tipo de vídeos que yo suelo montar, el tiempo de renderizado suele ser de un 80-90% de la duración del proyecto final, porque no suelo usar muchos efectos ni reescalados. Pero hay proyectos que pueden tardar incluso un 200% o 300% de la duración del proyecto.</p>



<p class="wp-block-paragraph"><strong>¿Y para qué sirve lo de Generar Script?</strong></p>



<p class="wp-block-paragraph">Esto es un «puntazo» en Kdenlive. Imagina que tienes que editar 10 vídeos independientes y renderizarlos uno a uno. Teniendo en cuenta que el renderizado merma considerablemente los recursos de la máquina, estarás perdiendo un tiempo precioso en realizar otras tareas.</p>



<p class="wp-block-paragraph">¿Pero y si pudieras editar los vídeos y renderizarlos todos de una vez? Podrías escoger un momento del día en el que no estés usando el equipo para hacer este trabajo.</p>



<p class="wp-block-paragraph">En este caso, en lugar de procesar a un archivo, <strong>genera un script </strong>el cual se quedará en Kdenlive esperando a que lo actives.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="731" height="284" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-13.png" alt="" class="wp-image-9015" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-13.png 731w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-13-300x117.png 300w" sizes="auto, (max-width: 731px) 100vw, 731px" /></figure>



<p class="wp-block-paragraph">Ahora podrías abrir el siguiente proyecto a renderizar y generar un nuevo script, el cual se añadirá a la cola:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="721" height="672" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-14.png" alt="" class="wp-image-9016" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-14.png 721w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-14-300x280.png 300w" sizes="auto, (max-width: 721px) 100vw, 721px" /></figure>



<p class="wp-block-paragraph">Cuando tengas todos los scripts generados, puedes iniciarlos de uno en uno, los cuales se irán yendo a la Cola de Tareas:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="726" height="462" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-15.png" alt="" class="wp-image-9017" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-15.png 726w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-15-300x191.png 300w" sizes="auto, (max-width: 726px) 100vw, 726px" /></figure>



<p class="wp-block-paragraph">Y lo mejor es que en la Cola de Tareas puedes marcar que se apague el equipo cuando termine de renderizar el último vídeo:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="720" height="464" src="https://danisanchez.net/wp-content/uploads/2020/08/imagen-16.png" alt="" class="wp-image-9018" srcset="https://danisanchez.net/wp-content/uploads/2020/08/imagen-16.png 720w, https://danisanchez.net/wp-content/uploads/2020/08/imagen-16-300x193.png 300w" sizes="auto, (max-width: 720px) 100vw, 720px" /></figure>



<p class="wp-block-paragraph">Bien, con esta pequeña guía y un poco de tu parte para seguir explorando y probando, creo que puedes hacerte rápidamente con este excelente editor de vídeo.</p>



<p class="wp-block-paragraph"><em>Me reservo para un siguiente artículo, cómo generar fácilmente pases de diapositivas partiendo de un directorio de imágenes, y además aplicar interesantes efectos de paneo y zoom, de forma muy sencilla.</em></p>



<p class="wp-block-paragraph">Un saludo y 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/tutorial-basico-kdenlive-el-editor-de-video-libre-de-la-comunidad-kde/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Crear el Archive Page de nuestro Custom Post (sin plugins)</title>
		<link>https://danisanchez.net/crear-el-archive-page-de-nuestro-custom-post-sin-plugins/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 26 Apr 2019 12:00:40 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom post]]></category>
		<category><![CDATA[desarrollo web]]></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=5385</guid>

					<description><![CDATA[Seguimos con esta serie de artículos destinados a la creación de nuestros propios tipos de contenido en WordPress. Hasta ahora hemos visto cómo crear un custom post, asignarle taxonomías y campos personalizados y hasta creamos un template para cargar toda esta información. Ahora lo que nos falta es crear la página archivo (archive page) para [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Seguimos con esta serie de artículos destinados a la creación de nuestros propios tipos de contenido en WordPress. Hasta ahora hemos visto cómo <a href="https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/" target="_blank" rel="noreferrer noopener">crear un custom post</a>, asignarle <a href="https://danisanchez.net/taxonomias-para-que-sirven-y-como-crearlas-sin-plugins/" target="_blank" rel="noreferrer noopener">taxonomías</a> y <a href="https://danisanchez.net/anadir-campos-personalizados-con-advanced-custom-field/" target="_blank" rel="noreferrer noopener">campos personalizados</a> y hasta<a href="https://danisanchez.net/crear-un-template-para-cargar-nuestro-custom-post-contenido-personalizado/" target="_blank" rel="noreferrer noopener"> creamos un template</a> para cargar toda esta información.</p>



<p class="wp-block-paragraph">Ahora lo que nos falta es crear la página archivo (<strong>archive page</strong>) para listar nuestro custom post, a modo de listado de entradas de WordPress.</p>



<p class="wp-block-paragraph">Para ello, al igual que hicimos con el template para el custom post (<em>single-vehiculos.php</em>), necesitamos crear un nuevo archivo (<em>page.php</em>) al que llamaremos por ejemplo <strong>page-todos-los-vehiculos.php</strong> y guardaremos en el directorio principal del tema activo.</p>



<p class="wp-block-paragraph"><strong>page.php</strong> es el archivo que contiene la estructura básica para una página interna de WordPress y al igual que hicimos con <em>single.php</em>, vamos a aprovechar el codigo escrito para copiarlo en nuestro archivo <em>page-todos-los-vehiculos.php</em> y eliminaremos lo que no necesitamos, dejando únicamente el inicio y final del loop.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="657" height="621" src="https://danisanchez.net/wp-content/uploads/2019/04/01-loop-archive-custom-post.jpg" alt="" class="wp-image-5389" srcset="https://danisanchez.net/wp-content/uploads/2019/04/01-loop-archive-custom-post.jpg 657w, https://danisanchez.net/wp-content/uploads/2019/04/01-loop-archive-custom-post-300x284.jpg 300w" sizes="auto, (max-width: 657px) 100vw, 657px" /></figure></div>



<p class="wp-block-paragraph">Dentro del loop vamos a crear la consulta que buscará todas entradas de tipo vehículo.</p>



<p class="wp-block-paragraph">La esctructura de la consulta se define:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">$args = array(
    'post_type' => 'vehiculos',
    'posts_per_page' => -1,
    'orderby' => 'date',
    'order' => 'DESC'
);
$consulta_vehiculos = new WP_Query($args);</pre></code></pre>



<p class="wp-block-paragraph">Primero declaramos una variable <strong>$args</strong> (argumentos) de tipo <em>array</em> donde pasamos los argumentos de la consulta. Los argumentos más básicos que vamos a definir son: el tipo de post al que hacemos referencia (vehículos), el número de resultados por página (-1 devuelve todos los resultados), el orden (por fecha) y el recorrido del orden (ascendente ASC o descendente DESC).</p>



<p class="wp-block-paragraph">Existen muchos otros argumentos que ponemos incorporar a la consulta para complicarla todo lo que deseemos, pero de momento vamos a empezar por lo más básico.</p>



<p class="wp-block-paragraph">Despues generamos una nueva consulta <strong>new WP_Query()</strong> pasándole los argumentos definidos anteriormente: <strong>new WP_Query($args)</strong>.</p>



<p class="wp-block-paragraph">A continuación vamos a mostrar los datos recogidos en la consulta creando nuestro propio loop. La síntaxis sería la siguiente:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">while($consulta_vehiculos->have_posts()) : $consulta_vehiculos->the_post();
   //Código
endwhile; wp_reset_postdata();</pre></code></pre>



<p class="wp-block-paragraph">La forma de declarar nuestro loop personalizado es muy similar al que toma WordPress para el loop principal, con la diferencia de que especificamos la variable donde tenemos nuestra consulta:</p>



<p class="wp-block-paragraph"><strong>while($consulta_vehiculos-&gt;have_posts())</strong><br><strong>$consulta_vehiculos-&gt;the_post()</strong></p>



<p class="wp-block-paragraph">Lo que se traduciría en lenguaje comprensible como: «<em>Mientras existan posts de vehículos, muestrame el post de vehículo</em>«.</p>



<p class="wp-block-paragraph">El final del loop finaliza con <strong>endwhile;</strong></p>



<p class="wp-block-paragraph">Además, para los loops personalizados añadimos la función <strong>wp_reset_postdata()</strong> para «limpiar» los datos de la consulta una vez mostrados y que no interfieran con otros loops que podamos definir en otras partes.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="728" height="533" src="https://danisanchez.net/wp-content/uploads/2019/04/03-codigo-consulta-final.jpg" alt="" class="wp-image-5396" srcset="https://danisanchez.net/wp-content/uploads/2019/04/03-codigo-consulta-final.jpg 728w, https://danisanchez.net/wp-content/uploads/2019/04/03-codigo-consulta-final-300x220.jpg 300w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure></div>



<p class="wp-block-paragraph">Para asociar este nuevo archivo con una página interna de WordPress que podamos, por ejemplo añadir al menú principal, crearemos una nueva página y utilizaremos como <em>slug</em> (enlace permanente) el nombre que le hayamos dado al archivo del listado, es decir si hemos llamado al archivo page-todos-los-vehiculos.php utilizaremos como <em>slug</em> en la nueva página «<em>todos-los-vehiculos</em>«.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="460" src="https://danisanchez.net/wp-content/uploads/2019/04/02-slug-pagina-todos-los-vehiculos.jpg" alt="" class="wp-image-5394" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02-slug-pagina-todos-los-vehiculos.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/02-slug-pagina-todos-los-vehiculos-300x138.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/02-slug-pagina-todos-los-vehiculos-768x353.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Como siempre, actualizamos los enlaces permanentes de WordPress en Ajustes &#8211; Enlaces Permanentes &#8211; Guardar Cambios y en este momento quedará asociado el nuevo archivo <em>page-todos-los-vehiculos.php</em> con la página interna de WordPress Vehículos.</p>



<p class="wp-block-paragraph">Para probar nuestra nueva página, vamos a incluir en loop una llamada a la función the_title(), que deberá devolvernos todos los títulos de los post de tipo vehículo que haya en la base de datos:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">while($consulta_vehiculos->have_posts()) : $consulta_vehiculos->the_post();
    the_title();
endwhile; wp_reset_postdata();</pre></code></pre>



<p class="wp-block-paragraph">Si visualizamos la página Vehículos, veremos que mostrará el título del post que hay actualmente creado de tipo vehículo:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="423" src="https://danisanchez.net/wp-content/uploads/2019/04/04-vista-pagina-archivo.jpg" alt="" class="wp-image-5398" srcset="https://danisanchez.net/wp-content/uploads/2019/04/04-vista-pagina-archivo.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/04-vista-pagina-archivo-300x127.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/04-vista-pagina-archivo-768x325.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Vamos a añadir algunos vehículos más para poder jugar con los listados de resultados:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="337" src="https://danisanchez.net/wp-content/uploads/2019/04/05.listado-vehiculos.jpg" alt="" class="wp-image-5405" srcset="https://danisanchez.net/wp-content/uploads/2019/04/05.listado-vehiculos.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/05.listado-vehiculos-300x101.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/05.listado-vehiculos-768x259.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Para la página de archivo de vehículos, tomaremos algunos datos para generar el listado, a parte del título, tomaremos la imagen destacada y una parte del contenido. Para ello, en lugar de llamar a la función <strong>the_content()</strong>, llamaremos a la función <strong>the_excerpt()</strong>, que toma solamente una parte del contenido.</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">while($consulta_vehiculos->have_posts()) : $consulta_vehiculos->the_post();
    the_post_thumbnail();
    the_title('&lt;h2>','&lt;/h2>');
    the_excerpt();
endwhile; wp_reset_postdata();</pre></code></pre>



<p class="wp-block-paragraph">Obtendríamos como resultado:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="1951" src="https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend.jpg" alt="" class="wp-image-5407" srcset="https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend-154x300.jpg 154w, https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend-525x1024.jpg 525w, https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend-768x1498.jpg 768w, https://danisanchez.net/wp-content/uploads/2019/04/06-listado-vehiculos-frontend-787x1536.jpg 787w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Por supuesto ya dependería de nosotros darle un poco de formato CSS, metiendo cada apartado en su correspondiente DIV, ajustando el tamaño de las miniaturas, etc. Detalles de diseño que no vamos a ver en este artículo, pues se extendería demasiado y el objetivo principal es el de generar el listado de entradas.</p>



<p class="wp-block-paragraph">En siguientes artículos veremos cómo paginar este listado, para cuando tengamos un número importante de entradas.</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>
					
		
		
			</item>
		<item>
		<title>Añadir campos personalizados con Advanced Custom Field</title>
		<link>https://danisanchez.net/anadir-campos-personalizados-con-advanced-custom-field/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Wed, 10 Apr 2019 07:19:11 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[advanced custom field]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=5336</guid>

					<description><![CDATA[Si queremos crear nuestros contenidos personalizados en WordPress, tenemos por un lado que crear nuestro propios custom posts, nuestras propias taxonomías y por supuesto, nuestros propios campos personalizados. ¿Para qué sirve un campo personalizado? Por defecto, en una entrada o página de WordPress tenemos dos campos principales para agregar información, el campo de título y [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si queremos crear nuestros contenidos personalizados en WordPress, tenemos por un lado que crear nuestro propios <a href="https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/" target="_blank" rel="noreferrer noopener">custom posts</a>, nuestras propias <a href="https://danisanchez.net/taxonomias-para-que-sirven-y-como-crearlas-sin-plugins/" target="_blank" rel="noreferrer noopener">taxonomías</a> y por supuesto, nuestros propios campos personalizados.</p>



<h3 class="wp-block-heading">¿Para qué sirve un campo personalizado?</h3>



<p class="wp-block-paragraph">Por defecto, en una entrada o página de WordPress tenemos dos campos principales para agregar información, el <strong>campo de título</strong> y el <strong>editor</strong> donde se redacta el contenido principal. Pero adicionalmente podemos agregar otro tipo de campos para mostrar en secciones especificas de nuestra plantilla o simplemente como información que solo veremos desde el modo de edición.</p>



<p class="wp-block-paragraph">Por ejemplo, podríamos crear un campo para poner el precio de un vehículo y llamar a ese dato en una ubicación especifica de nuestra plantilla. O podríamos crear un campo personalizado no visible al público, pero que guarde información importante sobre el vehículo, como información del anterior propietario, historial de revisiones etc.</p>



<h3 class="wp-block-heading">Advanced Custom Field</h3>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="760" height="248" src="https://danisanchez.net/wp-content/uploads/2019/04/01.acfield.jpg" alt="" class="wp-image-5337" srcset="https://danisanchez.net/wp-content/uploads/2019/04/01.acfield.jpg 760w, https://danisanchez.net/wp-content/uploads/2019/04/01.acfield-300x98.jpg 300w" sizes="auto, (max-width: 760px) 100vw, 760px" /></figure></div>



<p class="wp-block-paragraph">WordPress tiene su propio sistema de creación de campos personalizados, pero es algo confuso y poco intuitivo, por lo que muchos desarrolladores optamos por utilizar el plugin <a href="https://es.wordpress.org/plugins/advanced-custom-fields/" target="_blank" rel="noreferrer noopener">Advanced Custom Field</a>, que permite crear campos personalizados de múltiples tipos y llamarlos con sencillas funciones.</p>



<p class="wp-block-paragraph">Una vez instalado, Advanced Custom Field organiza los campos en grupos, por si necesitas crear diferentes campos para varios custom posts o páginas concretas, así que lo primero que haremos será crear un <strong>Nuevo Grupo de Campos</strong>:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="557" height="222" src="https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-grupo-de-campos.jpg" alt="" class="wp-image-5340" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-grupo-de-campos.jpg 557w, https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-grupo-de-campos-300x120.jpg 300w" sizes="auto, (max-width: 557px) 100vw, 557px" /></figure></div>



<p class="wp-block-paragraph">Lo primero será darle un título al nuevo Grupo de Campos, por ejemplo «Detalles Vehículos».</p>



<p class="wp-block-paragraph">Antes de añadir los campos, vamos a ver algunos ajustes importantes del nuevo grupo de campos, para empezar su ubicación.</p>



<h3 class="wp-block-heading">Ubicación del grupo de campos</h3>



<p class="wp-block-paragraph">Lo que nos interesa es que este grupo de campos aparezca en el modo de edición de Vehículos, siendo irrelevante que aparezca en otros modos de edición como Entradas o Páginas.</p>



<p class="wp-block-paragraph">Así que definiremos la ubicación en los <strong>Post Type que sean igual a Vehículo:</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="428" src="https://danisanchez.net/wp-content/uploads/2019/04/03.ubicacion-acf.jpg" alt="" class="wp-image-5342" srcset="https://danisanchez.net/wp-content/uploads/2019/04/03.ubicacion-acf.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/03.ubicacion-acf-300x128.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/03.ubicacion-acf-768x329.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<h3 class="wp-block-heading">Ajustes del grupo de campos</h3>



<p class="wp-block-paragraph">En el apartado de <strong>Ajustes </strong>definiremos el estilo del grupo de campos, lo recomendable es utilizar el estilo <strong>Estándar (WP metabox)</strong> que permite la funcionalidad de arrastarlo y soltarlo en la posición que deseemos. Y hablando de posiciones, la siguiente opción nos permite ubicarlo en la zona de central del modo edición (antes o después del contenido) o en el sidebar (lateral).</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="916" height="226" src="https://danisanchez.net/wp-content/uploads/2019/04/04.ajustes-acf.jpg" alt="" class="wp-image-5344" srcset="https://danisanchez.net/wp-content/uploads/2019/04/04.ajustes-acf.jpg 916w, https://danisanchez.net/wp-content/uploads/2019/04/04.ajustes-acf-300x74.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/04.ajustes-acf-768x189.jpg 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure></div>



<h3 class="wp-block-heading">Agregando campos</h3>



<p class="wp-block-paragraph">Ahora vamos a agregar los campos que necesitemos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="927" height="260" src="https://danisanchez.net/wp-content/uploads/2019/04/05-anadir-campo.jpg" alt="" class="wp-image-5345" srcset="https://danisanchez.net/wp-content/uploads/2019/04/05-anadir-campo.jpg 927w, https://danisanchez.net/wp-content/uploads/2019/04/05-anadir-campo-300x84.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/05-anadir-campo-768x215.jpg 768w" sizes="auto, (max-width: 927px) 100vw, 927px" /></figure></div>



<p class="wp-block-paragraph">Vamos a agregar un campo para el precio:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="914" height="571" src="https://danisanchez.net/wp-content/uploads/2019/04/06.propiedades-campo.jpg" alt="" class="wp-image-5346" srcset="https://danisanchez.net/wp-content/uploads/2019/04/06.propiedades-campo.jpg 914w, https://danisanchez.net/wp-content/uploads/2019/04/06.propiedades-campo-300x187.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/06.propiedades-campo-768x480.jpg 768w" sizes="auto, (max-width: 914px) 100vw, 914px" /></figure></div>



<p class="wp-block-paragraph">Los parámetros más importantes son la <strong>Etiqueta</strong> (texto que se mostrará en la página de edición), el <strong>Nombre del campo</strong> (identificador único sin espacios ni caracateres especiales) y opcionalmente, un campo para las intrucciones. Por ejemplo, para el campo Precio vamos a insertar un campo de <strong>tipo numérico</strong>, puede que un futuro nos interese ordenar los resultados de una búsqueda de vehículos por su precio y si lo especificamos como una cadena de caracteres (con puntuaciones, símbolos de moneda&#8230;), el sistema no sabría ordenarlo correctamente, por lo que solo se introducirán números sin puntuaciones ni signos.</p>



<p class="wp-block-paragraph">Vamos a añadir un par de campos más, uno para la matrícula (de tipo texto) y otro para observaciones internas (de tipo área de texto):</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="913" height="468" src="https://danisanchez.net/wp-content/uploads/2019/04/07.campo-matricula.jpg" alt="" class="wp-image-5347" srcset="https://danisanchez.net/wp-content/uploads/2019/04/07.campo-matricula.jpg 913w, https://danisanchez.net/wp-content/uploads/2019/04/07.campo-matricula-300x154.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/07.campo-matricula-768x394.jpg 768w" sizes="auto, (max-width: 913px) 100vw, 913px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="904" height="326" src="https://danisanchez.net/wp-content/uploads/2019/04/08.campo-observaciones.jpg" alt="" class="wp-image-5348" srcset="https://danisanchez.net/wp-content/uploads/2019/04/08.campo-observaciones.jpg 904w, https://danisanchez.net/wp-content/uploads/2019/04/08.campo-observaciones-300x108.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/08.campo-observaciones-768x277.jpg 768w" sizes="auto, (max-width: 904px) 100vw, 904px" /></figure></div>



<p class="wp-block-paragraph">Una vez definidos todos los campos, publicamos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1212" height="361" src="https://danisanchez.net/wp-content/uploads/2019/04/09.publicar-grupo-de-campos.jpg" alt="" class="wp-image-5349" srcset="https://danisanchez.net/wp-content/uploads/2019/04/09.publicar-grupo-de-campos.jpg 1212w, https://danisanchez.net/wp-content/uploads/2019/04/09.publicar-grupo-de-campos-300x89.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/09.publicar-grupo-de-campos-1024x305.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/04/09.publicar-grupo-de-campos-768x229.jpg 768w" sizes="auto, (max-width: 1212px) 100vw, 1212px" /></figure></div>



<h3 class="wp-block-heading">Publicar el primer Vehículo</h3>



<p class="wp-block-paragraph">Ya estamos listos para publicar un nuevo vehículo. Como en toda entrada pondremos un título y un texto descriptivo y seleccionaremos su/s taxonomía/s, en este caso «Automóvil»:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1199" height="565" src="https://danisanchez.net/wp-content/uploads/2019/04/10.crear-nuevo-vehiculo.jpg" alt="" class="wp-image-5350" srcset="https://danisanchez.net/wp-content/uploads/2019/04/10.crear-nuevo-vehiculo.jpg 1199w, https://danisanchez.net/wp-content/uploads/2019/04/10.crear-nuevo-vehiculo-300x141.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/10.crear-nuevo-vehiculo-1024x483.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/04/10.crear-nuevo-vehiculo-768x362.jpg 768w" sizes="auto, (max-width: 1199px) 100vw, 1199px" /></figure></div>



<p class="wp-block-paragraph">En la taxonomía de Extras rellenaremos algunas como: Aire Acondicionado, Dirección Asistida, ABS, etc. Y en nuestros nuevos campos personalizados rellenaremos el precio, la matrícula y las observaciones internas.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1019" height="563" src="https://danisanchez.net/wp-content/uploads/2019/04/11-detalles-vehiculo.jpg" alt="" class="wp-image-5351" srcset="https://danisanchez.net/wp-content/uploads/2019/04/11-detalles-vehiculo.jpg 1019w, https://danisanchez.net/wp-content/uploads/2019/04/11-detalles-vehiculo-300x166.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/11-detalles-vehiculo-768x424.jpg 768w" sizes="auto, (max-width: 1019px) 100vw, 1019px" /></figure></div>



<p class="wp-block-paragraph">Ahora que ya tenemos nuestro nuevo contenido publicado es el momento de crear un Template para mostrarlo en pantalla, pero eso lo veremos en el próximo 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>
					
		
		
			</item>
		<item>
		<title>Taxonomías, para qué sirven y cómo crearlas (sin plugins)</title>
		<link>https://danisanchez.net/taxonomias-para-que-sirven-y-como-crearlas-sin-plugins/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 08 Apr 2019 10:56:34 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación web]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[taxonomías]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=5320</guid>

					<description><![CDATA[Tras el último post en el que veíamos cómo crear custom posts, continuamos esta serie de artículos aprendiendo a generar nuestros propios contenidos en WordPress. Uno de los elementos más importantes son las taxonomías. Las taxonomías sirven para categorizar, organizar y filtrar nuestros contenidos de una forma mucho más concisa que utilizando el simple cajetín [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Tras el <a href="https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/" target="_blank" rel="noreferrer noopener">último post</a> en el que veíamos cómo crear custom posts, continuamos esta serie de artículos aprendiendo a generar nuestros propios contenidos en WordPress. Uno de los elementos más importantes son las <strong>taxonomías</strong>.</p>



<p class="wp-block-paragraph">Las taxonomías sirven para <em>categorizar, organizar y filtrar</em> nuestros contenidos de una forma mucho más concisa que utilizando el simple cajetín de categorías que WordPress incorpora por defecto. De hecho, tanto las categorías como las etiquetas de WordPress son en sí taxonomías. Veremos más adelante por qué.</p>



<p class="wp-block-paragraph">Continuando con el ejemplo del concesionario de vehículos, supongamos que necesitamos catalogar estos vehículos de diferentes formas. Por ejemplo, podríamos categorizarlos por tipo de vehículo: coche, camión, motocicleta&#8230;, pero también podríamos necesitar categorizarlo por el tipo de motor: diesel, gasolina, eléctrico&#8230;, por el número de puertas: 3, 4, 5&#8230;, por la marca, color, etc.</p>



<p class="wp-block-paragraph">En este caso, la categoría por defecto se nos quedaría corta, de ahí que necesitemos extender el número de «categorías» para definir correctamente el vehículo. Esa es la función principal de las taxonomías.</p>



<p class="wp-block-paragraph">Además, gracias a las taxonomías, podremos construir consultas personalizadas para mostrar únicamente las entradas que tengan marcadas esas taxonomías.</p>



<p class="wp-block-paragraph">Para declarar una taxonomía, utilizaremos como siempre, el archivo de funciones del tema activo (functions.php) o <a href="https://danisanchez.net/wordpress-crear-nuestro-propio-plugin-de-funciones/" target="_blank" rel="noreferrer noopener">nuestro propio plugin de funciones</a>. Podemos declarar todas las taxonomías que necesitemos utilizando la misma función.</p>



<h2 class="wp-block-heading">Declara una taxonomía</h2>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">function mis_taxonomias(){
    //Tipo de Vehículo
    $labels = array(
     'name' => _x('Tipo de Vehículo', 'taxonomy general name', 'twentysixteen'),
     'singular_name' => _x('Tipo de Vehículo', 'taxonomy_general_name', 'twentysixteen'),
     'search_items' => __('Buscar Tipo de Vehículo', 'twentysixteen'),
     'all_items' => __('Todos los Tipos de Vehículos', 'twentysixteen'),
     'parent_item' => __('Padre Tipo de Vehículo', 'twentysixteen'),
     'parent_item_colon' => __('Padre Tipo de Vehículo', 'twentysixteen'),
     'edit_item' => __('Editar Tipo de Vehículo', 'twentysixteen'),
     'update_item' => __('Actualizar Tipo de Vehículo', 'twentysixteen'),
     'add_new_item' => __('Añadir Nuevo Vehículo', 'twentysixteen'),
     'new_item_name' => __('Nuevo Tipo de Vehículo', 'twentysixteen'),
     'menu_name' => __('Tipo de Vehículo', 'twentysixteen'),
    );
    $args = array(
     'hierarchical'  => true,
     'labels'  => $labels,
     'show_ui'  => true,
     'show_admin_column'     => true,
     'query_var'  => true,
     'rewrite'  => array('slug' => 'tipo_de_vehiculo'),
    );
    register_taxonomy('tipo-vehiculo', array('vehiculos'), $args);
}
add_action('init','mis_taxonomias');</pre></code></pre>



<p class="wp-block-paragraph">La función <strong>register_taxonomy() </strong>es la encargada de declarar nuestras taxonomías personalizadas.</p>



<p class="wp-block-paragraph">La declaración es bastante similar a declarar un nuevo custom post. Por un lado recibe las etiquetas (labels) para los textos que se mostrará en el panel de WordPress, y por otro los argumentos (args) que definen las caracteríticas y el comportamiento.</p>



<p class="wp-block-paragraph">Los argumentos más interesantes son:</p>



<ul class="wp-block-list"><li><strong>hierarchical:</strong> su estado puede ser true o false. Si es true, la taxonomía mostrará los elementos a modo de listado para seleccionarlos tal y como se hace con las <strong>Categorías</strong> de WordPress. Si está en false, la taxonoḿia se verá como un campo de texto, donde insertaremos manualmente el nombre de los elementos de la taxonomía (como las <strong>Etiquetas</strong> de WordPress).</li><li><strong>rewrite:</strong> Donde especificaremos el slug de la taxonomía, que nos permitirá usar en un nuevo template para obtener un listado de las entradas que incluyan dicha taxonomía.</li></ul>



<p class="wp-block-paragraph">Una vez declarada, esta taxonomía se incluirá directamente como submenú dentro del menú de Vehículos (nuestro custom posts):</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="664" height="258" src="https://danisanchez.net/wp-content/uploads/2019/04/01.taxonomias-01.jpg" alt="" class="wp-image-5323" srcset="https://danisanchez.net/wp-content/uploads/2019/04/01.taxonomias-01.jpg 664w, https://danisanchez.net/wp-content/uploads/2019/04/01.taxonomias-01-300x117.jpg 300w" sizes="auto, (max-width: 664px) 100vw, 664px" /></figure></div>



<p class="wp-block-paragraph">Accediendo a la taxonomía podremos añadir elementos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="454" src="https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-elementos-taxonomia.jpg" alt="" class="wp-image-5324" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-elementos-taxonomia.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-elementos-taxonomia-300x136.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/02.anadir-elementos-taxonomia-768x349.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Una vez creados los elementos de la taxomía, si añadimos un nuevo vehículo veremos el cajetín de la taxonomía, con su listado de elementos a modo de nueva categoría.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="463" src="https://danisanchez.net/wp-content/uploads/2019/04/03.vista-taxonomia-en-custom-post.jpg" alt="" class="wp-image-5326" srcset="https://danisanchez.net/wp-content/uploads/2019/04/03.vista-taxonomia-en-custom-post.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/03.vista-taxonomia-en-custom-post-300x139.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/03.vista-taxonomia-en-custom-post-768x356.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Aprovechando la misma funcion (mis_taxonomias()), vamos a añadir una nueva categoría pero de un estilo más «flexible», donde vamos a especificar los «extras» del vehículo: aire acondicionado, pintura metalizada, dirección asistida, navegador&#8230;). Para ello crearemos una taxonomía al estilo de <strong>Etiquetas</strong> de WordPress.</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">//Extras del Vehículo
    $labels = array(
     'name' => _x('Extras', 'taxonomy general name', 'twentysixteen'),
     'singular_name' => _x('Extras', 'taxonomy_general_name', 'twentysixteen'),
     'search_items' => __('Buscar Extras', 'twentysixteen'),
     'all_items' => __('Todos los Extras', 'twentysixteen'),
     'parent_item' => __('Padre Extras', 'twentysixteen'),
     'parent_item_colon' => __('Padre Extras', 'twentysixteen'),
     'edit_item' => __('Editar Extras', 'twentysixteen'),
     'update_item' => __('Actualizar Extras', 'twentysixteen'),
     'add_new_item' => __('Añadir Extras', 'twentysixteen'),
     'new_item_name' => __('Nuevo Extras', 'twentysixteen'),
     'menu_name' => __('Extras', 'twentysixteen'),
    );
    $args = array(
     'hierarchical'  => false,
     'labels'  => $labels,
     'show_ui'          => true,
     'show_admin_column'     => true,
     'query_var'  => true,
     'rewrite'  => array('slug' => 'extras'),
    );
    register_taxonomy('extras', array('vehiculos'), $args);</pre></code></pre>



<p class="wp-block-paragraph">Para conseguir el aspecto de taxonomía a modo de etiquetas, solo tenemos que definir el parámetro <strong>&#8216;hierarchical&#8217;</strong> en false.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="601" src="https://danisanchez.net/wp-content/uploads/2019/04/04.vista-taxonomia-en-custom-post.jpg" alt="" class="wp-image-5328" srcset="https://danisanchez.net/wp-content/uploads/2019/04/04.vista-taxonomia-en-custom-post.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/04.vista-taxonomia-en-custom-post-300x180.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/04.vista-taxonomia-en-custom-post-768x462.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Ahora que sabemos cómo declarar nuevas taxonomías, crearemos algunas más que usaremos para hacer pruebas.</p>



<p class="wp-block-paragraph">En el siguiente post veremos cómo crear campos personalizados internos para nuestro custom post, como por ejemplo, un campo para el precio, otro para el año de fabricación, el kilometraje (si el vehículo es usado), etc.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Crear un custom post en WordPress (sin plugins)</title>
		<link>https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/</link>
					<comments>https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 05 Apr 2019 08:09:47 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom post]]></category>
		<category><![CDATA[desarrollo web]]></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=5307</guid>

					<description><![CDATA[En WordPress no estamos limitados a crear páginas internas y entradas de noticias, podemos crear nuestros propios contenidos a través de los llamados «custom posts«, es aquí donde nos damos cuenta del verdadero potencial de WordPress. Imaginemos que estamos desarrollando la web de un concesionario de vehículos y queremos publicarlos de forma que cada vehículo [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En WordPress no estamos limitados a crear páginas internas y entradas de noticias, podemos crear nuestros propios contenidos a través de los llamados «<em>custom posts</em>«, es aquí donde nos damos cuenta del verdadero potencial de WordPress.</p>



<p class="wp-block-paragraph">Imaginemos que estamos desarrollando la web de un concesionario de vehículos y queremos publicarlos de forma que cada vehículo se trate como una entrada individual, y así poder categorizarlos, añadirles etiquetas, realizar búsquedas, etc.</p>



<p class="wp-block-paragraph">Los <em>custom post</em> pueden ser declarados en el archivo de funciones del tema activo (functions.php) o en nuestro propio <a href="https://danisanchez.net/wordpress-crear-nuestro-propio-plugin-de-funciones/" target="_blank" rel="noreferrer noopener">plugin de funciones</a>.</p>



<h2 class="wp-block-heading">Declarar un custom post</h2>



<p class="wp-block-paragraph">La estructura básica para añadir el nuevo custom post sería:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">&lt;?php
//Custom Post Vehículos
function post_Vehiculos(){
 $labels = array(
 'name'               => _x('Vehículos', 'twentysixteen'),
 'singular_name'      => _x('Vehículo', 'post type singular name', 'twentysixteen'),
 'menu_name'          => _x('Vehículos', 'admin menu', 'gestiona-inmobiliaria'),
 'name_admin_bar'     => _x('Vehículos', 'add new on admin bar', 'twentysixteen'),
 'add_new'            => _x('Añadir Vehículo', 'book', 'twentysixteen'),
 'add_new_item'       => __('Añadir Nuevo Vehículo', 'twentysixteen'),
 'new_item'           => __('Nuevos Vehículos', 'twentysixteen'),
 'edit_item'          => __('Editar Vehículo', 'twentysixteen'),
 'view_item'          => __('Ver Vehículo', 'twentysixteen'),
 'all_items'          => __('Todos los Vehículos', 'twentysixteen'),
 'search_items'       => __('Buscar Vehículos', 'twentysixteen'),
 'parent_item_colon'  => __('Parent Vehículos:', 'twentysixteen'),
 'not_found'          => __('No se han encontrado Vehículos', 'twentysixteen'),
 'not_found_in_trash' => __('No se han encontrado Vehículos en la papelera', 'twentysixteen')
 );
 $args = array(
     'labels'             => $labels,
     'description'        => __('Description.', 'twentysixteen'),
     'public'             => true,
     'publicly_queryable' => true,
     'show_ui'            => true,
     'show_in_menu'       => true,
     'query_var'          => true,
     'rewrite'            => array('slug' => 'vehiculos'),
     'capability_type'    => 'post',
     'has_archive'        => true,
     'hierarchical'       => false,
     'menu_position'      => 6,
     'supports'           => array('title', 'editor', 'author', 'thumbnail'),
 );
 register_post_type('vehiculos', $args);
}
add_action('init', 'post_Vehiculos');
?></pre></code></pre>



<p class="wp-block-paragraph">La función contiene 2 elementos principales, las etiquetas ($labels) y los argumentos ($args).</p>



<p class="wp-block-paragraph">Las etiquetas hacen referencia a los textos que muestra WordPress acerca del custom post, tales como el nombre en singular, en plural, cómo se muestra en el menú, el texto para añadir uno nuevo, para editarlo, etc.</p>



<p class="wp-block-paragraph">Los argumentos tratan cómo se comportará el custom post, algunos parámetros interesantes son:</p>



<ul class="wp-block-list"><li><strong>rewrite</strong>: el slug que generará nuestro custom post, ejemplo: www.tudominio.com/<strong>vehiculos</strong>/url_del_post. Es importante escoger uno apropiado de cara al SEO.</li><li><strong>capability_type:</strong> especifica si el custom post se va a comportar como una página interna (para información fija) o como un post (entrada). Normalmente pondremos tipo post.</li><li><strong>has_archive: </strong>define si el custom post va a tener su propio archivo-listado de posts.</li><li><strong>menu_position:</strong> Controla en qué posición del menú aparecerá el nuevo custom post, por ejemplo, antes o después de las Entradas normales. Podemos jugar con el número hasta dejarlo donde queremos.</li><li><strong>supports</strong>: Define los elementos que podremos utilizar dentro del custom post, por ejemplo un campo para el título, el editor de WordPress, el autor y la imagen destacada (thumbnail).</li></ul>



<p class="wp-block-paragraph">Una vez declarado estará disponible en nuestro menú:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="285" src="https://danisanchez.net/wp-content/uploads/2019/04/custom-post.jpg" alt="" class="wp-image-5312" srcset="https://danisanchez.net/wp-content/uploads/2019/04/custom-post.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/custom-post-300x86.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/custom-post-768x219.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Si añadimos un nuevo vehículo, veremos una pantalla de edición muy similar a las entradas, con su campo para el título, el editor de WordPress, la selección del autor y la imagen destacada:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="557" src="https://danisanchez.net/wp-content/uploads/2019/04/custom-post-2.jpg" alt="" class="wp-image-5313" srcset="https://danisanchez.net/wp-content/uploads/2019/04/custom-post-2.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/custom-post-2-300x167.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/custom-post-2-768x428.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Sin embargo esto podríamos enriquecerlo mucho más, añadiendo categorías, taxonomías y campos personalizados que desatarán realmente todo el potencial de los custom post y que harán que podamos realizar prácticamente cualquier tipo de web.</p>



<p class="wp-block-paragraph">Veremos cómo integrarlos en siguientes posts.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Crear un botón de donación PayPal en WordPress (con y sin plugins)</title>
		<link>https://danisanchez.net/crear-un-boton-de-donacion-paypal-en-wordpress-con-y-sin-plugins/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 01 Apr 2019 16:05:16 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=5210</guid>

					<description><![CDATA[En este artículo veremos cómo insertar un botón de donación de PayPal en cualquier lugar de nuestro sitio web (una entrada, una página, un widget&#8230;) con el que podremos recibir donativos de nuestros usuarios/lectores. Lo primero, por supuesto es contar con una cuenta de PayPal, así que si no dispones de ella, ábrela en pocos [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En este artículo veremos cómo insertar un botón de donación de PayPal en cualquier lugar de nuestro sitio web (una entrada, una página, un widget&#8230;) con el que podremos recibir donativos de nuestros usuarios/lectores.</p>



<p class="wp-block-paragraph">Lo primero, por supuesto es contar con una cuenta de PayPal, así que si no dispones de ella, <a href="https://www.paypal.com/es/webapps/mpp/account-selection" target="_blank" rel="noreferrer noopener">ábrela en pocos minutos</a>.</p>



<h2 class="wp-block-heading">Botón de donaciones PayPal con Plugin</h2>



<p class="wp-block-paragraph">Una vez creada nuestra cuenta en PayPal, la forma más cómoda y rápida de crear nuestro botón de donaciones es através de un plugin, en concreto usaremos <a href="https://es.wordpress.org/plugins/paypal-donations/" target="_blank" rel="noreferrer noopener">PayPal Donations,</a> un plugin gratuito y de código abierto.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="751" height="246" src="https://danisanchez.net/wp-content/uploads/2019/04/01-boton-paypal.jpg" alt="" class="wp-image-5211" srcset="https://danisanchez.net/wp-content/uploads/2019/04/01-boton-paypal.jpg 751w, https://danisanchez.net/wp-content/uploads/2019/04/01-boton-paypal-300x98.jpg 300w" sizes="auto, (max-width: 751px) 100vw, 751px" /></figure></div>



<p class="wp-block-paragraph">Una vez instalado y activado, nos dirigimos al menú &#8211; <strong>Ajustes &#8211; PayPal Donations:</strong></p>



<h3 class="wp-block-heading">1. Configurar la cuenta</h3>



<p class="wp-block-paragraph">Insertamos nuestra dirección de correo de PayPal y seleccionamos la moneda en la que queremos recibir los pagos:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="965" height="550" src="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-2-1-1.jpg" alt="" class="wp-image-5239" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-2-1-1.jpg 965w, https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-2-1-1-300x171.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-2-1-1-768x438.jpg 768w" sizes="auto, (max-width: 965px) 100vw, 965px" /></figure></div>



<h3 class="wp-block-heading">2. Ajustes opcionales</h3>



<p class="wp-block-paragraph">En nuestra cuenta de Paypal es posible crear plantillas de página de pago adaptadas según el tipo de pago que se vaya a realizar, por ejemplo puedes personalizar una página para pagos de tipo ventas, de tipo suscripción o de tipo donaciones. Si la hemos definido podemos especificarla en el campo «<strong>Estilo de página</strong>«, si no se especifica, se utilizará la página de pago por defecto.</p>



<p class="wp-block-paragraph">En la página de retorno redigiremos a nuestro usuario a una URL concreta, por ejemplo, una página de agradecimiento.</p>



<h3 class="wp-block-heading">3. Por defecto</h3>



<p class="wp-block-paragraph">Podemos fijar una cantidad por defecto para el donativo. Si lo dejamos en blanco, será el usuario el que tenga que introducir la cantidad a donar:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-2-1-1.jpg" alt="" class="wp-image-5214"/></figure></div>



<p class="wp-block-paragraph"><strong>Motivo de la donación: </strong>Es un texto opcional que aparecerá en la página de pago de Paypal, así como la <strong>Referencia</strong>, otro campo opcional.</p>



<h3 class="wp-block-heading">4. Botón de donación</h3>



<p class="wp-block-paragraph">En este apartado seleccionaremos el estilo para nuestro botón, permitiéndonos poder utilizar nuestro propio diseño especificando la URL de la ubicación de la imagen. Asímismo seleccionamos el idioma por defecto y guardamos los cambios.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="638" height="479" src="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-3.jpg" alt="" class="wp-image-5216" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-3.jpg 638w, https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-3-300x225.jpg 300w" sizes="auto, (max-width: 638px) 100vw, 638px" /></figure></div>



<h3 class="wp-block-heading">5. Ajustes avanzados</h3>



<p class="wp-block-paragraph">Algunos ajustes extras que nos ofrece el plugin se centran en la activación o desactivación de estadísticas, estilos CSS del botón, abrir la página de pago en PayPal en una nueva pestaña (para no perder el foco de nuestro sitio web), idiomas, etc. Si no estás seguro de lo que haces, mi recomendación es que lo dejes como está por defecto.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="954" height="808" src="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-avanzados.jpg" alt="" class="wp-image-5218" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-avanzados.jpg 954w, https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-avanzados-300x254.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/02.paypal-donations-ajustes-avanzados-768x650.jpg 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></figure></div>



<p class="wp-block-paragraph">Otra opción interesante es activar el modo <strong>Sandbox de PayPal</strong>. Para ello necesitas crear una cuenta sandbox en <a href="http://developer.paypal.com" target="_blank" rel="noreferrer noopener">http://developer.paypal.com</a>. Sandbox es una especie de web clon de PayPal para pruebas. En ella, podrás crear cuentas de administrador y de cliente para probar el sistema de pagos en tu sitio web con compras ficticias.</p>



<p class="wp-block-paragraph">Terminados de configurar los ajustes, podrás llamar a tu botón de donativos en cualquier parte de tu web utilizando el shortcode:</p>



<pre class="wp-block-code"><code>&#91;paypal-donation]</code></pre>



<p class="wp-block-paragraph">Así mismo disponemos de un widget listo para arrastrar y soltar el cualquier sidebar (lateral, header o footer&#8230;)</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="347" height="542" src="https://danisanchez.net/wp-content/uploads/2019/04/03.paypal-widget.jpg" alt="" class="wp-image-5221" srcset="https://danisanchez.net/wp-content/uploads/2019/04/03.paypal-widget.jpg 347w, https://danisanchez.net/wp-content/uploads/2019/04/03.paypal-widget-192x300.jpg 192w" sizes="auto, (max-width: 347px) 100vw, 347px" /></figure></div>



<h2 class="wp-block-heading">Botón de donaciones PayPal sin Plugin</h2>



<p class="wp-block-paragraph">La alternativa a usar un plugin es crear nuestro propio botón de Donaciones desde el panel administrador de PayPal y obtener un código HTML que necesitamos pegar en nuestro sitio.</p>



<p class="wp-block-paragraph"><em>Debido a los cambios que pueda realizar PayPal en su panel de control, es posible que encuentres diferencias entre las capturas del artículo y el estado actual del panel de PayPal.</em></p>



<p class="wp-block-paragraph">Para crear un botón de donaciones en PayPal tenemos que acceder al menú «Herramientas &#8211; Todas las Herramientas» y localizar el apartado Botones de PayPal.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1250" height="526" src="https://danisanchez.net/wp-content/uploads/2019/04/04.botones-de-paypal.jpg" alt="" class="wp-image-5222" srcset="https://danisanchez.net/wp-content/uploads/2019/04/04.botones-de-paypal.jpg 1250w, https://danisanchez.net/wp-content/uploads/2019/04/04.botones-de-paypal-300x126.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/04.botones-de-paypal-1024x431.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/04/04.botones-de-paypal-768x323.jpg 768w" sizes="auto, (max-width: 1250px) 100vw, 1250px" /></figure></div>



<p class="wp-block-paragraph">En el menú derecho seleccionamos <strong>Crear nuevo botón</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="274" height="166" src="https://danisanchez.net/wp-content/uploads/2019/04/05-crear-nuevo-boton.jpg" alt="" class="wp-image-5223"/></figure></div>



<p class="wp-block-paragraph">Seleccionamos tipo de botón: Donativos</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="922" height="505" src="https://danisanchez.net/wp-content/uploads/2019/04/06-boton-donativos.jpg" alt="" class="wp-image-5224" srcset="https://danisanchez.net/wp-content/uploads/2019/04/06-boton-donativos.jpg 922w, https://danisanchez.net/wp-content/uploads/2019/04/06-boton-donativos-300x164.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/06-boton-donativos-768x421.jpg 768w" sizes="auto, (max-width: 922px) 100vw, 922px" /></figure></div>



<p class="wp-block-paragraph">En el primer paso seleccionamos país, idioma y aspecto del botón:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="802" height="577" src="https://danisanchez.net/wp-content/uploads/2019/04/07.paso-1-boton-donativos.jpg" alt="" class="wp-image-5225" srcset="https://danisanchez.net/wp-content/uploads/2019/04/07.paso-1-boton-donativos.jpg 802w, https://danisanchez.net/wp-content/uploads/2019/04/07.paso-1-boton-donativos-300x216.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/07.paso-1-boton-donativos-768x553.jpg 768w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure></div>



<p class="wp-block-paragraph">En el siguiente paso podemos especificar nuestro logotipo para la página de pago, nuestro nombre, un texto opcional para la causa de la donación y si queremos seleccionar uno de los programas con los que PayPal colabora para donaciones. De no ser el caso, indicaremos que no.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="866" height="597" src="https://danisanchez.net/wp-content/uploads/2019/04/08.paso-2-boton-donativos.jpg" alt="" class="wp-image-5226" srcset="https://danisanchez.net/wp-content/uploads/2019/04/08.paso-2-boton-donativos.jpg 866w, https://danisanchez.net/wp-content/uploads/2019/04/08.paso-2-boton-donativos-300x207.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/08.paso-2-boton-donativos-768x529.jpg 768w" sizes="auto, (max-width: 866px) 100vw, 866px" /></figure></div>



<p class="wp-block-paragraph">En el siguiente paso especificamos la moneda por defecto (EUR), y seleccionaremos si queremos fijar un importe fijo para el donativo o que sea el usuario quien lo especifique. También podemos ofrecerle al usuario la posibilidad de convertirlo en un donativo periódico, que se efectúe mensualmente.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="862" height="543" src="https://danisanchez.net/wp-content/uploads/2019/04/09.paso-3-boton-donativos.jpg" alt="" class="wp-image-5227" srcset="https://danisanchez.net/wp-content/uploads/2019/04/09.paso-3-boton-donativos.jpg 862w, https://danisanchez.net/wp-content/uploads/2019/04/09.paso-3-boton-donativos-300x189.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/09.paso-3-boton-donativos-768x484.jpg 768w" sizes="auto, (max-width: 862px) 100vw, 862px" /></figure></div>



<h3 class="wp-block-heading">Opciones finales</h3>



<p class="wp-block-paragraph">Las últimas opciones de configuarción se dividen en 4 apartados.</p>



<p class="wp-block-paragraph">En primer lugar podemos especificar si queremos obtener las direcciones de correo electrónico de los donantes y si queremos permitir a los donantes enviar una nota junto al donativo.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="886" height="433" src="https://danisanchez.net/wp-content/uploads/2019/04/10.paso-4-opciones-finales.jpg" alt="" class="wp-image-5228" srcset="https://danisanchez.net/wp-content/uploads/2019/04/10.paso-4-opciones-finales.jpg 886w, https://danisanchez.net/wp-content/uploads/2019/04/10.paso-4-opciones-finales-300x147.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/10.paso-4-opciones-finales-768x375.jpg 768w" sizes="auto, (max-width: 886px) 100vw, 886px" /></figure></div>



<p class="wp-block-paragraph">El siguiente apartado hace referencia a las URLs de redirección, una para cuando se completa correctamente un donativo y otra para cuando se produce un error en el mismo.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="482" height="261" src="https://danisanchez.net/wp-content/uploads/2019/04/11.paso-5-opciones-finales.jpg" alt="" class="wp-image-5229" srcset="https://danisanchez.net/wp-content/uploads/2019/04/11.paso-5-opciones-finales.jpg 482w, https://danisanchez.net/wp-content/uploads/2019/04/11.paso-5-opciones-finales-300x162.jpg 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></figure></div>



<p class="wp-block-paragraph">En esta opción decidiremos si PayPal nos reconocerá por nuestra dirección de correo electrónico de PayPal o por nuestro ID de vendedor. PayPal recomienda utilizar el ID de vendedor, de esta forma nuestra dirección de e-mail no quedará expuesta a posibles bots de SPAM.</p>



<p class="wp-block-paragraph">Recordemos que a la hora de configurar el plugin PayPal Donations, tuvimos que especificar la dirección de correo de nuestra cuenta de PayPal (no el ID), por lo que crear el botón de donativos de esta forma es una ventaja (a parte de óptimo).</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="799" height="198" src="https://danisanchez.net/wp-content/uploads/2019/04/12.paso-6-opciones-finales.jpg" alt="" class="wp-image-5230" srcset="https://danisanchez.net/wp-content/uploads/2019/04/12.paso-6-opciones-finales.jpg 799w, https://danisanchez.net/wp-content/uploads/2019/04/12.paso-6-opciones-finales-300x74.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/12.paso-6-opciones-finales-768x190.jpg 768w" sizes="auto, (max-width: 799px) 100vw, 799px" /></figure></div>



<p class="wp-block-paragraph">La última opción está destinada a usuarios avanzados o desarrolladores. En resumen, sirve para enviar ciertas variables a un script de nuestro sitio web que procese la información de pago de PayPal, por si el desarrollador quiere hacer alguna función o tarea cada vez que se reciba un pago en el sitio web.</p>



<p class="wp-block-paragraph">Para terminar, pulsamos el botón <strong>Finalizar y obtener código:</strong></p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="632" height="535" src="https://danisanchez.net/wp-content/uploads/2019/04/13.paso-7-opciones-finales.jpg" alt="" class="wp-image-5232" srcset="https://danisanchez.net/wp-content/uploads/2019/04/13.paso-7-opciones-finales.jpg 632w, https://danisanchez.net/wp-content/uploads/2019/04/13.paso-7-opciones-finales-300x254.jpg 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></figure></div>



<p class="wp-block-paragraph">Para pegar este código HTML, solo tenemos que irnos a cualquier página o entrada y poner el editor de WordPress en modo HTML:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="881" height="199" src="https://danisanchez.net/wp-content/uploads/2019/04/14.paso-8-modo-html.jpg" alt="" class="wp-image-5234" srcset="https://danisanchez.net/wp-content/uploads/2019/04/14.paso-8-modo-html.jpg 881w, https://danisanchez.net/wp-content/uploads/2019/04/14.paso-8-modo-html-300x68.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/14.paso-8-modo-html-768x173.jpg 768w" sizes="auto, (max-width: 881px) 100vw, 881px" /></figure></div>



<p class="wp-block-paragraph">Si estamos usando el nuevo editor Gutemberg, solo tenemos que añadir un bloque de HTML Personalizado y pegar el código:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="412" height="440" src="https://danisanchez.net/wp-content/uploads/2019/04/15.paso-9-modo-html-personalizado.jpg" alt="" class="wp-image-5236" srcset="https://danisanchez.net/wp-content/uploads/2019/04/15.paso-9-modo-html-personalizado.jpg 412w, https://danisanchez.net/wp-content/uploads/2019/04/15.paso-9-modo-html-personalizado-281x300.jpg 281w" sizes="auto, (max-width: 412px) 100vw, 412px" /></figure></div>



<p class="wp-block-paragraph">O si queremos añadirlo como un widget, usaremos el Widget de HTML Personalizado:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="831" height="565" src="https://danisanchez.net/wp-content/uploads/2019/04/16.paso-10-modo-widget.jpg" alt="" class="wp-image-5237" srcset="https://danisanchez.net/wp-content/uploads/2019/04/16.paso-10-modo-widget.jpg 831w, https://danisanchez.net/wp-content/uploads/2019/04/16.paso-10-modo-widget-300x204.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/16.paso-10-modo-widget-768x522.jpg 768w" sizes="auto, (max-width: 831px) 100vw, 831px" /></figure></div>



<p class="wp-block-paragraph">Y eso es todo. ya no hay excusa para no integrar nuestro propio botón de donaciones en nuestro sitio web <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>
					
		
		
			</item>
		<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 loading="lazy" 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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>Instalar Dropbox en Manjaro 18 «Illyria»</title>
		<link>https://danisanchez.net/instalar-dropbox-en-manjaro-18-illyria/</link>
					<comments>https://danisanchez.net/instalar-dropbox-en-manjaro-18-illyria/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 28 Jan 2019 17:59:27 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[manjaro]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4582</guid>

					<description><![CDATA[Una de mis distros GNU/Linux favorita es Manjaro Linux. Casi siempre he sido usuario de distribuciones basadas en Debian/Ubuntu, por estabilidad, compatibilidad y amigabilidad. Pero las distribuciones basadas en Arch tienen sus ventajas: también son estables, no hay que reinstalar cada vez que sale una nueva versión sino que se actualiza sobre la marcha (rolling [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Una de mis distros GNU/Linux favorita es Manjaro Linux. Casi siempre he sido usuario de distribuciones basadas en Debian/Ubuntu, por estabilidad, compatibilidad y amigabilidad. Pero las distribuciones basadas en Arch tienen sus ventajas: también son estables, no hay que reinstalar cada vez que sale una nueva versión sino que se actualiza sobre la marcha (rolling release) y casi siempre trabajan sobre los últimos Kernels, por lo que te aseguras contar con las recientes novedades, nuevas funcionalidades y últimas versiones de tu software preferido.</p>



<p class="wp-block-paragraph">Uno de los problemas que me he encontrado recientemente con Manjaro Linux es la instalación de Dropbox. Al parecer, el paquete de Dropbox disponible en los respositorios o paquetería AUR no está soportado actualmente y lanza un error durante la instalación.</p>



<p class="wp-block-paragraph">La otra opción es descargar Dropbox desde su web oficial, compilarlo manualmente o hacer una instalación por línea de comandos.</p>



<p class="wp-block-paragraph">Esta última opción es la que te recomiendo.</p>



<h2 class="wp-block-heading">Descargar Dropbox mediante línea de comandos</h2>



<p class="wp-block-paragraph">Antes de decirte el código que debes pegar en tu terminal para descargar Dropbox mediante línea de comandos, te voy a instar a acudir a la página de descarga de Dropbox:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://www.dropbox.com/install" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="1036" height="396" src="https://danisanchez.net/wp-content/uploads/2019/01/01.descargar-dropbox.png" alt="" class="wp-image-4583" srcset="https://danisanchez.net/wp-content/uploads/2019/01/01.descargar-dropbox.png 1036w, https://danisanchez.net/wp-content/uploads/2019/01/01.descargar-dropbox-300x115.png 300w, https://danisanchez.net/wp-content/uploads/2019/01/01.descargar-dropbox-1024x391.png 1024w, https://danisanchez.net/wp-content/uploads/2019/01/01.descargar-dropbox-768x294.png 768w" sizes="auto, (max-width: 1036px) 100vw, 1036px" /></a></figure></div>



<p class="wp-block-paragraph">Fíjate hacia la parte final donde encontrarás las líneas para la descarga. Escoge la versión de 64 bits (si estás usando Manjaro Linux actualizado no existirá ya versión de 32 bits).</p>



<pre class="wp-block-preformatted">cd ~ &amp;&amp; wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -</pre>



<p class="wp-block-paragraph">Pégala en tu terminal y espera a que se instale.</p>



<p class="wp-block-paragraph">Una vez instalada ya puedes ejectutar DropBox con el comando:</p>



<pre class="wp-block-preformatted">~/.dropbox-dist/dropboxd</pre>



<p class="wp-block-paragraph">El problema es que si cierras la ventana del terminal, también se cerrará Dropbox, por lo que te recomiendo que lo añadas como una aplicación a ejecutar al inicio del sistema.</p>



<h2 class="wp-block-heading">Iniciar Dropbox automáticamente al inicio de sesión</h2>



<p class="wp-block-paragraph">Sea cual sea el entorno de escritorio que estés utilizando, tendrás una opción para ver las aplicaciones que se ejecutan al inicio del sistema. En el caso de XFCE, busca «<strong>Sesión e inicio</strong>«:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="600" height="492" src="https://danisanchez.net/wp-content/uploads/2019/01/02.sesion-e-inicio.jpg" alt="" class="wp-image-4584" srcset="https://danisanchez.net/wp-content/uploads/2019/01/02.sesion-e-inicio.jpg 600w, https://danisanchez.net/wp-content/uploads/2019/01/02.sesion-e-inicio-300x246.jpg 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure></div>



<p class="wp-block-paragraph">Dirígete a la pestaña de Autoarranque de aplicaciones y pulsa en añadir:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="604" height="553" src="https://danisanchez.net/wp-content/uploads/2019/01/03-anadir-aplicacion.png" alt="" class="wp-image-4585" srcset="https://danisanchez.net/wp-content/uploads/2019/01/03-anadir-aplicacion.png 604w, https://danisanchez.net/wp-content/uploads/2019/01/03-anadir-aplicacion-300x275.png 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></figure></div>



<p class="wp-block-paragraph">Pon un nombre a la aplicación y una descripción (opcional) y en el campo «Orden» haz clic en el icono de flecha:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="306" height="175" src="https://danisanchez.net/wp-content/uploads/2019/01/04.nombre-de-la-aplicacion.png" alt="" class="wp-image-4586" srcset="https://danisanchez.net/wp-content/uploads/2019/01/04.nombre-de-la-aplicacion.png 306w, https://danisanchez.net/wp-content/uploads/2019/01/04.nombre-de-la-aplicacion-300x172.png 300w" sizes="auto, (max-width: 306px) 100vw, 306px" /></figure></div>



<p class="wp-block-paragraph">En tu directorio /home/tu_usuario/ localiza el directorio <strong>.dropbox-dist</strong> (este es un directorio oculto, asegúrate de que se muestran haciendo clic derecho y marcando «mostrar archivos ocultos».</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="890" height="580" src="https://danisanchez.net/wp-content/uploads/2019/01/05-localizar-dropbox-dist-2.jpg" alt="" class="wp-image-4592" srcset="https://danisanchez.net/wp-content/uploads/2019/01/05-localizar-dropbox-dist-2.jpg 890w, https://danisanchez.net/wp-content/uploads/2019/01/05-localizar-dropbox-dist-2-300x196.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/05-localizar-dropbox-dist-2-768x500.jpg 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></figure></div>



<p class="wp-block-paragraph">Localiza el archivo <strong>dropboxd</strong>, pues es la aplicación que necesitas ejecutar para abrir Dropbox cada vez que inicies sesión en tu PC.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="890" height="580" src="https://danisanchez.net/wp-content/uploads/2019/01/06.dropboxd-2.jpg" alt="" class="wp-image-4593" srcset="https://danisanchez.net/wp-content/uploads/2019/01/06.dropboxd-2.jpg 890w, https://danisanchez.net/wp-content/uploads/2019/01/06.dropboxd-2-300x196.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/06.dropboxd-2-768x500.jpg 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></figure></div>



<p class="wp-block-paragraph">Una vez añadida, asegúrate de que aparece en la lista de autoarranque de aplicaciones y ya no te tendrás que preocupar más de iniciar Dropbox de forma manual.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="604" height="553" src="https://danisanchez.net/wp-content/uploads/2019/01/07.dropbox-anadida.png" alt="" class="wp-image-4589" srcset="https://danisanchez.net/wp-content/uploads/2019/01/07.dropbox-anadida.png 604w, https://danisanchez.net/wp-content/uploads/2019/01/07.dropbox-anadida-300x275.png 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></figure></div>



<p class="wp-block-paragraph">Espero que te haya sido útil este artículo y disfruta de tu nube <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/instalar-dropbox-en-manjaro-18-illyria/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>WooCommerce &#8211; Activar el envío gratuito automático según el importe del carrito</title>
		<link>https://danisanchez.net/woocommerce-activar-el-envio-gratuito-automatico-segun-el-importe-del-carrito/</link>
					<comments>https://danisanchez.net/woocommerce-activar-el-envio-gratuito-automatico-segun-el-importe-del-carrito/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 21 Jan 2019 09:00:46 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[woocommerce]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4519</guid>

					<description><![CDATA[Un aliciente para conseguir más ventas en nuestra tienda online es la de ofrecer promociones o descuentos a partir de una cantidad mínima de pedido. Unos de los recursos más utilizados es ofrecer el envío gratuito. Siendo conscientes de que a WooCommerce le queda un largo camino para convertirse en un estándar como plataforma de [&#8230;]]]></description>
										<content:encoded><![CDATA[
<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/vF8f-TKCp6Q" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" width="100%" height="315" frameborder="0"></iframe>



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



<p class="wp-block-paragraph">Un aliciente para conseguir más ventas en nuestra tienda online es la de ofrecer promociones o descuentos a partir de una cantidad mínima de pedido. Unos de los recursos más utilizados es ofrecer el envío gratuito.</p>



<p class="wp-block-paragraph">Siendo conscientes de que a WooCommerce le queda un largo camino para convertirse en un estándar como plataforma de E-Commerce, debido precisamente a sus muchas carencias y limitaciones en su base, podemos ofrecer esta alternativa de envío gratuito no sin algún que otro «extraño» que como veremos en este artículo podremos solucionar aplicando un pequeño «parche».</p>



<h3 class="wp-block-heading">Añadiendo el método de envío gratuito</h3>



<p class="wp-block-paragraph">Desde el «limitado» configurador de envíos de WooCommerce, supongamos que tenemos un coste fijo de 4.5€ por envío, pero queremos que cuando el carrito llegue o supere los 50€, el envío salga gratis.</p>



<p class="wp-block-paragraph">Para ellos nos dirigiremos a la sección de Envío dentro de WooCommerce:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1080" height="455" src="https://danisanchez.net/wp-content/uploads/2019/01/001-envios-woocommerce.jpg" alt="" class="wp-image-4520" srcset="https://danisanchez.net/wp-content/uploads/2019/01/001-envios-woocommerce.jpg 1080w, https://danisanchez.net/wp-content/uploads/2019/01/001-envios-woocommerce-300x126.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/001-envios-woocommerce-1024x431.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/001-envios-woocommerce-768x324.jpg 768w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure></div>



<p class="wp-block-paragraph">En el que podemos ver que para la zona España existe un método de envío configurado consistente en un precio fijo, sea cual sea el importe de carrito.</p>



<p class="wp-block-paragraph">Vamos a añadir un nuevo método de envío para la zona de España, haciendo clic en el enlace España, y el botón Añadir método de Envío:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1059" height="624" src="https://danisanchez.net/wp-content/uploads/2019/01/002-anadir-metodo-de-envio.jpg" alt="" class="wp-image-4521" srcset="https://danisanchez.net/wp-content/uploads/2019/01/002-anadir-metodo-de-envio.jpg 1059w, https://danisanchez.net/wp-content/uploads/2019/01/002-anadir-metodo-de-envio-300x177.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/002-anadir-metodo-de-envio-1024x603.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/002-anadir-metodo-de-envio-768x453.jpg 768w" sizes="auto, (max-width: 1059px) 100vw, 1059px" /></figure></div>



<p class="wp-block-paragraph">En la ventana modal que se abrirá seleccionamos de la lista: Envío gratuito y lo añadimos como método de envío:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="918" height="571" src="https://danisanchez.net/wp-content/uploads/2019/01/003-seleccionar-envio-gratuito.jpg" alt="" class="wp-image-4522" srcset="https://danisanchez.net/wp-content/uploads/2019/01/003-seleccionar-envio-gratuito.jpg 918w, https://danisanchez.net/wp-content/uploads/2019/01/003-seleccionar-envio-gratuito-300x187.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/003-seleccionar-envio-gratuito-768x478.jpg 768w" sizes="auto, (max-width: 918px) 100vw, 918px" /></figure></div>



<p class="wp-block-paragraph">Ahora editamos el nuevo método de envío, pasando el ratón por encima, aparecerá el enlace Editar:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1069" height="754" src="https://danisanchez.net/wp-content/uploads/2019/01/004-editar-envio-gratuito.jpg" alt="" class="wp-image-4523" srcset="https://danisanchez.net/wp-content/uploads/2019/01/004-editar-envio-gratuito.jpg 1069w, https://danisanchez.net/wp-content/uploads/2019/01/004-editar-envio-gratuito-300x212.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/004-editar-envio-gratuito-1024x722.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/004-editar-envio-gratuito-768x542.jpg 768w" sizes="auto, (max-width: 1069px) 100vw, 1069px" /></figure></div>



<p class="wp-block-paragraph">En esta pantalla podemos seleccionar el nombre que aparecerá como Envío en el carrito de compra (por defecto Envío gratuito), y seleccionaremos la condición requerida para que el método de envío se active.</p>



<p class="wp-block-paragraph">En este caso seleccionaremos «Una cantidad mínima de pedido», y en el siguiente campo el importe mínimo (50€).</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1142" height="643" src="https://danisanchez.net/wp-content/uploads/2019/01/005-una-cantidad-minima-de-pedido.jpg" alt="" class="wp-image-4524" srcset="https://danisanchez.net/wp-content/uploads/2019/01/005-una-cantidad-minima-de-pedido.jpg 1142w, https://danisanchez.net/wp-content/uploads/2019/01/005-una-cantidad-minima-de-pedido-300x169.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/005-una-cantidad-minima-de-pedido-1024x577.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/005-una-cantidad-minima-de-pedido-768x432.jpg 768w" sizes="auto, (max-width: 1142px) 100vw, 1142px" /></figure></div>



<p class="wp-block-paragraph">Guardamos los cambios y añadimos unos cuantos artículos al carrito para ver el resultado.</p>



<p class="wp-block-paragraph">Podemos fijarnos que el método de Envío gratuito aparece al cumplirse la condición de que el carrito supere los 50€, pero esta no es una «solución natural», ya que obligas al cliente a elegir el método de envío gratuito, cosa que no tiene sentido, pues ningún cliente querría seleccionar pagar por el envío. Es más, si el cliente se equivoca y elige pagar, para después descubrir que le podría haber salido gratis, seguramente recibamos una reclamación, y no queremos eso.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="902" height="544" src="https://danisanchez.net/wp-content/uploads/2019/01/006-seleccionar-metodos-de-envio.jpg" alt="" class="wp-image-4525" srcset="https://danisanchez.net/wp-content/uploads/2019/01/006-seleccionar-metodos-de-envio.jpg 902w, https://danisanchez.net/wp-content/uploads/2019/01/006-seleccionar-metodos-de-envio-300x181.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/006-seleccionar-metodos-de-envio-768x463.jpg 768w" sizes="auto, (max-width: 902px) 100vw, 902px" /></figure></div>



<p class="wp-block-paragraph">Lo ideal sería, que superados los 50€ en el carrito, se activase automáticamente el envío gratuito y no apareciera ninguna opción más.</p>



<h3 class="wp-block-heading">Añadiendo la función al archivo de funciones del tema activo</h3>



<p class="wp-block-paragraph">Eso han debido pensar los desarrolladores de WooCommerce, ya que ellos mismos han lanzado una función para este problema, que de momento, en la versión 3.5.3, no está integrada en el núcleo.</p>



<p class="wp-block-paragraph">En la siguiente página de la documentación oficial de WooCommerce, podréis encontrar la función según vuestra versión:</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/#" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="1224" height="760" src="https://danisanchez.net/wp-content/uploads/2019/01/10-documentacion-woocommerce.jpg" alt="" class="wp-image-4529" srcset="https://danisanchez.net/wp-content/uploads/2019/01/10-documentacion-woocommerce.jpg 1224w, https://danisanchez.net/wp-content/uploads/2019/01/10-documentacion-woocommerce-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/10-documentacion-woocommerce-1024x636.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/10-documentacion-woocommerce-768x477.jpg 768w" sizes="auto, (max-width: 1224px) 100vw, 1224px" /></a></figure></div>



<p class="wp-block-paragraph">URL documentación: <a href="https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/" target="_blank" rel="noreferrer noopener">https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/</a></p>



<p class="wp-block-paragraph">Para versiones de <strong>WooCommerce 3.0</strong> en adelante, hay que incluir este código en el archivo de funciones de vuestro tema activo, o en vuestro <a href="https://danisanchez.net/wordpress-crear-nuestro-propio-plugin-de-funciones/" target="_blank" rel="noreferrer noopener">plugin de funciones personales</a> si lo tenéis habilitado:</p>



<pre class="wp-block-code"><code>/**
 * Hide shipping rates when free shipping is available.
 * Updated to support WooCommerce 2.6 Shipping Zones.
 *
 * @param array $rates Array of rates found for the package.
 * @return array
 */
function my_hide_shipping_when_free_is_available( $rates ) {
 $free = array();
 foreach ( $rates as $rate_id =&gt; $rate ) {
 if ( 'free_shipping' === $rate-&gt;method_id ) {
 $free&#91; $rate_id ] = $rate;
 break;
 }
 }
 return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );</code></pre>



<p class="wp-block-paragraph">Y este para versiones de <strong>WooCommerce hasta la 2.5</strong>:</p>



<pre class="wp-block-code"><code>/**
 * woocommerce_package_rates is a 2.1+ hook
 */
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 
/**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
function hide_shipping_when_free_is_available( $rates, $package ) {
  
  // Only modify rates if free_shipping is present
   if ( isset( $rates&#91;'free_shipping'] ) ) {
   
   // To unset a single rate/method, do the following. This example unsets flat_rate shipping
   unset( $rates&#91;'flat_rate'] );
   
   // To unset all methods except for free_shipping, do the following
   $free_shipping          = $rates&#91;'free_shipping'];
   $rates                  = array();
   $rates&#91;'free_shipping'] = $free_shipping;
 }
 
 return $rates;
}</code></pre>



<p class="wp-block-paragraph">En nuestro ejemplo vamos a ir a Apariencia &#8211; Editor y seleccionamos nuestro tema activo. Localizamos el archivo de funciones (functions.php) y pegamos el código al final del archivo.</p>



<p class="wp-block-paragraph"><strong>Muy importante: Siempre que hagamos cambios en archivos internos del tema, hacer una copia de seguridad del archivo.</strong></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1036" height="654" src="https://danisanchez.net/wp-content/uploads/2019/01/007-editar-functions-php.jpg" alt="" class="wp-image-4526" srcset="https://danisanchez.net/wp-content/uploads/2019/01/007-editar-functions-php.jpg 1036w, https://danisanchez.net/wp-content/uploads/2019/01/007-editar-functions-php-300x189.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/007-editar-functions-php-1024x646.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/007-editar-functions-php-768x485.jpg 768w" sizes="auto, (max-width: 1036px) 100vw, 1036px" /></figure></div>



<p class="wp-block-paragraph">Actualizamos y antes de probar la nueva función, vaciamos la caché de WooCommerce en:</p>



<p class="wp-block-paragraph"><strong>WooCommerce &#8211; Estado &#8211; Pestaña Herramientas &#8211; Borrar datos temporales</strong></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1277" height="477" src="https://danisanchez.net/wp-content/uploads/2019/01/008-vaciar-cache-woocommerce.jpg" alt="" class="wp-image-4527" srcset="https://danisanchez.net/wp-content/uploads/2019/01/008-vaciar-cache-woocommerce.jpg 1277w, https://danisanchez.net/wp-content/uploads/2019/01/008-vaciar-cache-woocommerce-300x112.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/008-vaciar-cache-woocommerce-1024x382.jpg 1024w, https://danisanchez.net/wp-content/uploads/2019/01/008-vaciar-cache-woocommerce-768x287.jpg 768w" sizes="auto, (max-width: 1277px) 100vw, 1277px" /></figure></div>



<p class="wp-block-paragraph">Ahora sí, nos dirigimos nuevamente al carrito y actualizamos:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1000" height="644" src="https://danisanchez.net/wp-content/uploads/2019/01/009-woocommerce-envio-gratuito-automatico.jpg" alt="" class="wp-image-4528" srcset="https://danisanchez.net/wp-content/uploads/2019/01/009-woocommerce-envio-gratuito-automatico.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/01/009-woocommerce-envio-gratuito-automatico-300x193.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/009-woocommerce-envio-gratuito-automatico-768x495.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<div style="color:#32373c;background-color:#fac038" class="wp-block-genesis-blocks-gb-notice gb-font-size-18 gb-block-notice" data-id="aebbab"><div class="gb-notice-title" style="color:#333333"><p>IMPORTANTE SI USAS EL MÉTODO DE RECOGIDA EN LOCAL</p></div><div class="gb-notice-text" style="border-color:#fac038"><p>Si tienes habilitada la opción Recogida en local, el código anterior también ocultará este método de envío dejando solamente el gratuito. Para que además del envío gratuito también aparezca el de Recogida en local tienes que usar este código (proporcionado también en la documentación de WooCommerce):</p></div></div>



<pre class="wp-block-code"><code>/**
 * Hide shipping rates when free shipping is available, but keep "Local pickup" 
 * Updated to support WooCommerce 2.6 Shipping Zones
 */

function hide_shipping_when_free_is_available( $rates, $package ) {
	$new_rates = array();
	foreach ( $rates as $rate_id => $rate ) {
		// Only modify rates if free_shipping is present.
		if ( 'free_shipping' === $rate->method_id ) {
			$new_rates&#91; $rate_id ] = $rate;
			break;
		}
	}

	if ( ! empty( $new_rates ) ) {
		//Save local pickup if it's present.
		foreach ( $rates as $rate_id => $rate ) {
			if ('local_pickup' === $rate->method_id ) {
				$new_rates&#91; $rate_id ] = $rate;
				break;
			}
		}
		return $new_rates;
	}

	return $rates;
}

add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );</code></pre>



<p class="wp-block-paragraph">Veremos cómo ahora, el envío gratuito es activado automáticamente si el importe del carrito es igual o supera los 50€, no mostrando ni permitiendo seleccionar otro método.</p>



<p class="wp-block-paragraph">Espero que este tipo de «parches» y complementos se vayan incorporando o afinando en el núcleo de WooCommerce en el futuro, si queremos tener una plataforma completa de e-commerce, más que un añadido de WordPress para vender productos. Seguro que poco a poco lo vamos consiguiendo&#8230;</p>



<p class="wp-block-paragraph">Si te ha gustado el artículo, no olvides compartirlo en tus redes 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/woocommerce-activar-el-envio-gratuito-automatico-segun-el-importe-del-carrito/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Crear un WebView con Android Studio para cargar una web en una APP Android</title>
		<link>https://danisanchez.net/crear-webview-con-android-studio-para-cargar-una-web-en-una-app-android/</link>
					<comments>https://danisanchez.net/crear-webview-con-android-studio-para-cargar-una-web-en-una-app-android/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 15 Jan 2019 08:00:35 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[publicaciones]]></category>
		<category><![CDATA[tutoriales]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=4477</guid>

					<description><![CDATA[AVISO: Este artículo tiene más de 2 años. La metodología y los códigos expuestos funcionaban entonces. Durante este tiempo, Google ha restringido mucho el uso del WebView en sus aplicaciones para Android, por lo que muchas de las técnicas que se ven en este artículo puede que ya no funcionen. Es por ello que este [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-white-color has-vivid-red-background-color has-text-color has-background wp-block-paragraph"><strong>AVISO</strong>: Este artículo tiene <strong>más de 2 años</strong>. La metodología y los códigos expuestos funcionaban entonces. Durante este tiempo, <strong>Google ha restringido mucho el uso del WebView</strong> en sus aplicaciones para Android, por lo que muchas de las técnicas que se ven en este artículo <strong>puede que ya no funcionen</strong>. Es por ello que este artículo queda como <strong>práctica teórica</strong>, en lugar de una solución para producción real.</p>



<p class="wp-block-paragraph">Si has desarrollado una página web <em>responsive</em> (que se adapta correctamente a dispositivos móviles), puedes aprovecharla para crear una <em>Aplicación Android</em> que cargue tu sitio web y contar con otro medio de difusión más para tu proyecto.</p>



<p class="wp-block-paragraph">Aunque las <em>Aplicaciones Web</em> no aprovechan las capacidades de un smartphone o tablet del mismo modo que una <em>APP nativa</em>, pueden ser útiles para lanzar una versión <em>APP móvil</em> de tu tienda online, o catálogo de productos para enseñar a tus clientes, o&nbsp; un sistema de reservas para tu restaurante o para alquilar tus inmuebles. Hay múltiples sectores en los que sería aprovechable, y al usar un recurso que ya tienes creado (tu web) supone un ahorro importante al no tener que realizar un desarrollo desde cero para la APP.</p>



<p class="wp-block-paragraph">Para crear tu <em>Web APP</em> necesitarás instalar el kit de desarrollo para aplicaciones <em>Android Studio</em> de Google.</p>



<p class="wp-block-paragraph">Puedes descargarlo para tu sistema operativo desde la web: <a href="https://developer.android.com/studio/?hl=es-419" target="_blank" rel="noreferrer noopener">https://developer.android.com/studio/?hl=es-419</a></p>



<p class="wp-block-paragraph">Desde sistemas GNU/Linux, es muy problable que lo encuentres en los repositorios de tu distribución o como <strong>paquete snap</strong>.</p>



<p class="wp-block-paragraph">Una vez instalado, antes de crear la aplicación, vamos a descargar algunos SDK sobre los que trabajar. Para ello hacemos clic en el botón <strong>Configure -&gt; SDK Manager</strong>:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="801" height="724" src="https://danisanchez.net/wp-content/uploads/2019/01/20-bajar-sdk.jpg" alt="" class="wp-image-4503" srcset="https://danisanchez.net/wp-content/uploads/2019/01/20-bajar-sdk.jpg 801w, https://danisanchez.net/wp-content/uploads/2019/01/20-bajar-sdk-300x271.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/20-bajar-sdk-768x694.jpg 768w" sizes="auto, (max-width: 801px) 100vw, 801px" /></figure></div>



<p class="wp-block-paragraph">A continuación seleccionamos los SDKs que nos interese para nuestras aplicaciones. Algunas funciones o métodos pueden variar según lanzan nuevas versiones de Android, por ello,&nbsp; para desarrollar nuestra APP podemos elegir algunos SDKs sobre los que implementarla. Para nuestro WebView, vamos a partir desde Android 4.4 KitKat, que funcionará según Android Studio, en el 95% de los dispositivos Android de hoy en día.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="605" src="https://danisanchez.net/wp-content/uploads/2019/01/001-descargar-sdk.jpg" alt="" class="wp-image-4480" srcset="https://danisanchez.net/wp-content/uploads/2019/01/001-descargar-sdk.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/001-descargar-sdk-300x202.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/001-descargar-sdk-768x516.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Yo por ejemplo, tengo descargados los SDK de KitKat (4.4 API 19), Lollipop (5.1 API 22), Nougat (7.1.1 API 25) y Pie (9.0 API 28) que viene por defecto.</p>



<p class="wp-block-paragraph">Una vez descargados creamos un nuevo proyecto:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="777" height="501" src="https://danisanchez.net/wp-content/uploads/2019/01/002-empezar-proyecto.jpg" alt="" class="wp-image-4481" srcset="https://danisanchez.net/wp-content/uploads/2019/01/002-empezar-proyecto.jpg 777w, https://danisanchez.net/wp-content/uploads/2019/01/002-empezar-proyecto-300x193.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/002-empezar-proyecto-768x495.jpg 768w" sizes="auto, (max-width: 777px) 100vw, 777px" /></figure></div>



<p class="wp-block-paragraph">Primero nos pedirá dar un nombre a la aplicación:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="678" src="https://danisanchez.net/wp-content/uploads/2019/01/003-nombrar-aplicacion.jpg" alt="" class="wp-image-4483" srcset="https://danisanchez.net/wp-content/uploads/2019/01/003-nombrar-aplicacion.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/003-nombrar-aplicacion-300x226.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/003-nombrar-aplicacion-768x579.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">A continuación debemos seleccionar la API que se considera mínima para hacer funcionar la aplicación. Lo recomandable, para llegar al mayor número de dispositivos posibles, es seleccionar una API baja, si nuestra APP no va tener métodos o funcionalidades que solo se encuentran en APIs recientes.</p>



<p class="wp-block-paragraph">Para nuestro WebView vamos a partir de la API 19, correspondiente a la versión Android 4.4 KitKat, que según Android Studio, funcionará en más del 95% de los dispositivos Android de hoy en día.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="678" src="https://danisanchez.net/wp-content/uploads/2019/01/004-seleccionar-api.jpg" alt="" class="wp-image-4484" srcset="https://danisanchez.net/wp-content/uploads/2019/01/004-seleccionar-api.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/004-seleccionar-api-300x226.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/004-seleccionar-api-768x579.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">En la siguiente pantalla vamos a seleccionar una Actividad Vacía (Empty Activity). Las actividades son como las pantallas de la aplicación (o las páginas de una web). En nuestra aplicación solo vamos a tener una Actividad con el componente WebView que cargará nuestro sitio web:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="678" src="https://danisanchez.net/wp-content/uploads/2019/01/005-actividad-vacia.jpg" alt="" class="wp-image-4485" srcset="https://danisanchez.net/wp-content/uploads/2019/01/005-actividad-vacia.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/005-actividad-vacia-300x226.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/005-actividad-vacia-768x579.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Damos un nombre a nuestra actividad, por ejemplo, Principal:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="678" src="https://danisanchez.net/wp-content/uploads/2019/01/006-nombre-actividad.jpg" alt="" class="wp-image-4486" srcset="https://danisanchez.net/wp-content/uploads/2019/01/006-nombre-actividad.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/006-nombre-actividad-300x226.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/006-nombre-actividad-768x579.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Finalizamos y esperamos unos segundos a que se cargue toda la interfaz. Es posible que durante la carga aparezcan algunos mensajes de error. No te preocupes, desaparecerán cuando se haya cargado todo el entorno de desarrollo.</p>



<p class="wp-block-paragraph">La interfaz principal nos muestra dos archivos principales, el layout <strong><em>activity_principal.xml</em></strong> y la clase <strong><em>Principal.java</em></strong>. Sin pretender hacer un manual de Android Studio o de desarrollo de aplicaciones móviles, resumidamente podríamos decir que el Layout (XML) es donde se crean los elementos de la interfaz de la aplicación (textos, imágenes, botones&#8230;), y las Clases (java) donde se programa la funcionalidad de esos elementos.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="594" src="https://danisanchez.net/wp-content/uploads/2019/01/007-interfaz-principal.jpg" alt="" class="wp-image-4487" srcset="https://danisanchez.net/wp-content/uploads/2019/01/007-interfaz-principal.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/007-interfaz-principal-300x198.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/007-interfaz-principal-768x507.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Para añadir nuestro WebView, abrimos la pestaña <strong>activity_principal.xml </strong>y desde la Paleta de Elementos, arrastramos un Widget de WebView hacia la interfaz de la aplicación:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="508" src="https://danisanchez.net/wp-content/uploads/2019/01/008-arrastrar-webview.jpg" alt="" class="wp-image-4490" srcset="https://danisanchez.net/wp-content/uploads/2019/01/008-arrastrar-webview.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/008-arrastrar-webview-300x169.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/008-arrastrar-webview-768x433.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">En las propiedades de WebView (a la derecha), damos un identificador (ID), por ejemplo <strong>visorWeb</strong> (si vas a utilizar el código de este ejemplo para tu aplicación, utiliza también el mismo identificador):</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="507" src="https://danisanchez.net/wp-content/uploads/2019/01/009-id-visor-web.jpg" alt="" class="wp-image-4491" srcset="https://danisanchez.net/wp-content/uploads/2019/01/009-id-visor-web.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/009-id-visor-web-300x169.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/009-id-visor-web-768x433.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Ahora vamos ajustar el ancho y alto del WebView para que ocupe el máximo de la pantalla del dispositivo en el que se visualice. Para ello hay que definir el <strong>layout_width</strong> y el <strong>layout_height</strong> en «<strong>fill_parent</strong>«:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="509" src="https://danisanchez.net/wp-content/uploads/2019/01/010.-layout-width.jpg" alt="" class="wp-image-4492" srcset="https://danisanchez.net/wp-content/uploads/2019/01/010.-layout-width.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/010.-layout-width-300x170.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/010.-layout-width-768x434.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="508" src="https://danisanchez.net/wp-content/uploads/2019/01/011-layout-height.jpg" alt="" class="wp-image-4493" srcset="https://danisanchez.net/wp-content/uploads/2019/01/011-layout-height.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/011-layout-height-300x169.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/011-layout-height-768x433.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Ahora pasamos a la pestaña Principal.java.</p>



<p class="wp-block-paragraph">Añadimos la siguiente línea para crear el componente WebView:</p>



<pre class="wp-block-preformatted">WebView miVisorWeb</pre>



<p class="wp-block-paragraph">Si el WebView se marca en color rojo, significa que hay que importar sus métodos y propiedades a la clase actual. Si pasas el ratón por encima del componente, Android Studio te sugerirá que lo importes pulsando Alt + Intro:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="504" src="https://danisanchez.net/wp-content/uploads/2019/01/012-webview-alt-intro.jpg" alt="" class="wp-image-4494" srcset="https://danisanchez.net/wp-content/uploads/2019/01/012-webview-alt-intro.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/012-webview-alt-intro-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/012-webview-alt-intro-768x430.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Al importar, se añadirá automáticamente la línea <strong>import android.webkit.WebView;</strong></p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="505" src="https://danisanchez.net/wp-content/uploads/2019/01/13-webview-import.jpg" alt="" class="wp-image-4495" srcset="https://danisanchez.net/wp-content/uploads/2019/01/13-webview-import.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/13-webview-import-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/13-webview-import-768x431.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Ahora definimos la URL de nuestro sitio web que se cargará en el WebView:</p>



<pre class="wp-block-code"><code>String url = &quot;https://danisanchez.net/&quot;;</code></pre>



<p class="wp-block-paragraph">Y dentro de la función onCreateBundle, añadimos las siguientes líneas:</p>



<pre class="wp-block-code"><code>miVisorWeb = (WebView) findViewById(R.id.visorWeb);
final WebSettings ajustesVisorWeb = miVisorWeb.getSettings();
ajustesVisorWeb.setJavaScriptEnabled(true);
miVisorWeb.loadUrl(url);</code></pre>



<p class="wp-block-paragraph"><em>miVisorWeb = (WebView) findViewById(R.id.visorWeb)</em> enlaza el componente WebView con el Widget de WebView que añadimos a la interfaz anteriormente a través de su identificador (ID)</p>



<p class="wp-block-paragraph">Además, habilitaremos el JavaScript para que los elementos JavaScript funcionen correctamente desde la APP.</p>



<p class="wp-block-paragraph">Y finalmente llamamos a cargar la url que definimos anteriormente: miVisorWeb.loadUrl(url);</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="505" src="https://danisanchez.net/wp-content/uploads/2019/01/14-run-app.jpg" alt="" class="wp-image-4496" srcset="https://danisanchez.net/wp-content/uploads/2019/01/14-run-app.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/14-run-app-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/14-run-app-768x431.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Quedando el código de Principal.java de esta forma:</p>



<pre class="wp-block-code"><code>package net.gestionatuweb.miwebapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class Principal extends AppCompatActivity {
    WebView miVisorWeb;
    String url = &quot;https://danisanchez.net/&quot;;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        miVisorWeb = (WebView) findViewById(R.id.visorWeb);
        final WebSettings ajustesVisorWeb = miVisorWeb.getSettings();
        ajustesVisorWeb.setJavaScriptEnabled(true);
        miVisorWeb.loadUrl(url);
    }</code></pre>



<p class="wp-block-paragraph">A continuación tenemos que dar a nuestra aplicación permisos para acceder a Internet, de lo contrario no podrá cargar nuestro sitio web.</p>



<p class="wp-block-paragraph">Para ello tenemos que abrir el archivo Manifest que se encuentra en el árbol de archivos de nuestro proyecto <strong>app -&gt; manifests -&gt; AndroidManifest.xml&nbsp;</strong>y añadimos la siguiente línea:</p>



<pre class="wp-block-code"><code>&lt;uses-permission android:name="android.permission.INTERNET"/&gt;</code></pre>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="505" src="https://danisanchez.net/wp-content/uploads/2019/01/17-uses-perission-internet.jpg" alt="" class="wp-image-4497" srcset="https://danisanchez.net/wp-content/uploads/2019/01/17-uses-perission-internet.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/17-uses-perission-internet-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/17-uses-perission-internet-768x431.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Para probar nuestra APP, podemos ir al menú <strong>RUN &#8211; &#8216;Run app&#8217;</strong>.</p>



<p class="wp-block-paragraph">Hay dos métodos para probar nuestra aplicación. La primera es utilizar un dispositivo Android real, por ejemplo tu smartphone o tablet. Para que este sea reconocido por Android Studio, tendrás que conectarlo por usb al PC y tener en tu smartphone o tablet el modo de <em>Depuración USB Habilitada.</em> Si todo está bien será reconocido en la siguiente pantalla en <em>Connected Devides</em>:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="624" height="490" src="https://danisanchez.net/wp-content/uploads/2019/01/15-crear-dispositivo-virtual.jpg" alt="" class="wp-image-4498" srcset="https://danisanchez.net/wp-content/uploads/2019/01/15-crear-dispositivo-virtual.jpg 624w, https://danisanchez.net/wp-content/uploads/2019/01/15-crear-dispositivo-virtual-300x236.jpg 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></figure></div>



<p class="wp-block-paragraph">O podemos crear un dispositivo virtual haciendo clic en <strong>Create New Virtual Device.</strong></p>



<p class="wp-block-paragraph">Android Studio nos propone una serie de dispositivos ya preconfigurados, solo tenemos que seleccionar uno de ellos y esperar a que se descargue y configure el nuevo dispositivo:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="610" src="https://danisanchez.net/wp-content/uploads/2019/01/16-seleccionar-dispositivo-virtual.jpg" alt="" class="wp-image-4499" srcset="https://danisanchez.net/wp-content/uploads/2019/01/16-seleccionar-dispositivo-virtual.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/16-seleccionar-dispositivo-virtual-300x203.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/16-seleccionar-dispositivo-virtual-768x521.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Ahora abrimos nuestro nuevo dispositivo y comprobamos que la web cargue correctamente:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="552" src="https://danisanchez.net/wp-content/uploads/2019/01/18-probar-app-virtual.jpg" alt="" class="wp-image-4500" srcset="https://danisanchez.net/wp-content/uploads/2019/01/18-probar-app-virtual.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/18-probar-app-virtual-300x184.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/18-probar-app-virtual-768x471.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Nos encontramos con el problema de que el botón «Atrás» de nuestro dispositivo, cierra la aplicación en lugar de volver a una página anterior de nuestro sitio web. Esto ocurre porque el botón «Atrás», no detecta que se esté navegando a través de una página web, si no que intenta ir a una actividad anterior de nuestra aplicación y como solamente tenemos una actividad creada, el siguiente paso hacía atrás consiste en cerrarla.</p>



<p class="wp-block-paragraph">Para controlar esto podemos añadir el siguiente código dentro del archivo <strong>Principal.java</strong>:</p>



<pre class="wp-block-code"><code>//Impedir que el botón Atrás cierre la aplicación
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        WebView miVisorWeb;
        miVisorWeb = (WebView) findViewById(R.id.visorWeb);
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    if (miVisorWeb.canGoBack()) {
                        miVisorWeb.goBack();
                    } else {
                        finish();
                    }
                    return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }</code></pre>



<p class="wp-block-paragraph">Os dejo el código completo del archivo <strong>Principal.java</strong> por si queréis copiarlo íntegro para vuestras pruebas:</p>



<pre class="wp-block-code"><code>package net.gestionatuweb.miwebapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
public class Principal extends AppCompatActivity {
    WebView miVisorWeb;
    String url = &quot;https://danisanchez.net/&quot;;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_principal);
        miVisorWeb = (WebView) findViewById(R.id.visorWeb);
        final WebSettings ajustesVisorWeb = miVisorWeb.getSettings();
        ajustesVisorWeb.setJavaScriptEnabled(true);
        miVisorWeb.loadUrl(url);
    }
    //Impedir que el botón Atrás cierre la aplicación
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        WebView miVisorWeb;
        miVisorWeb = (WebView) findViewById(R.id.visorWeb);
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    if (miVisorWeb.canGoBack()) {
                        miVisorWeb.goBack();
                    } else {
                        finish();
                    }
                    return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}</code></pre>



<p class="wp-block-paragraph">Ya solo nos queda definir un icono a nuestra APP y generar el .apk final para poder instalarlo en cualquier dispositivo Android o subirlo a la Play Store.</p>



<p class="wp-block-paragraph">Para generar el icono de nuestra aplicación, crearemos una nueva Image Asset, posicionándonos sobre el directorio mipmap del proyecto, botón derecho y New Image Asset.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="578" src="https://danisanchez.net/wp-content/uploads/2019/01/20-imagen-asset.jpg" alt="" class="wp-image-4508" srcset="https://danisanchez.net/wp-content/uploads/2019/01/20-imagen-asset.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/20-imagen-asset-300x193.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/20-imagen-asset-768x493.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Veremos la pantalla del icono por defecto en todas sus versiones. Para agilizar el trabajo, podemos simplemente reemplazar la imagen por defecto por la imagen que hayamos preparado para nuestro icono en el campo Path:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="625" src="https://danisanchez.net/wp-content/uploads/2019/01/21-seleccion-nuevo-icono.jpg" alt="" class="wp-image-4507" srcset="https://danisanchez.net/wp-content/uploads/2019/01/21-seleccion-nuevo-icono.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/21-seleccion-nuevo-icono-300x208.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/21-seleccion-nuevo-icono-768x533.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Localizamos la nueva imagen en nuestro PC:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="502" height="519" src="https://danisanchez.net/wp-content/uploads/2019/01/22-seleccionar-nueva-imagen-para-icono.jpg" alt="" class="wp-image-4509" srcset="https://danisanchez.net/wp-content/uploads/2019/01/22-seleccionar-nueva-imagen-para-icono.jpg 502w, https://danisanchez.net/wp-content/uploads/2019/01/22-seleccionar-nueva-imagen-para-icono-290x300.jpg 290w" sizes="auto, (max-width: 502px) 100vw, 502px" /></figure></div>



<p class="wp-block-paragraph">Podemos usar la barra resize para encajar nuestro nuevo icono en todas las variantes:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="504" src="https://danisanchez.net/wp-content/uploads/2019/01/23-redimensionar-icono.jpg" alt="" class="wp-image-4510" srcset="https://danisanchez.net/wp-content/uploads/2019/01/23-redimensionar-icono.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/23-redimensionar-icono-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/23-redimensionar-icono-768x430.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">En la pestaña Background Layer podemos ajustar el fondo. Para el ejemplo usaremos el color blanco.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="625" src="https://danisanchez.net/wp-content/uploads/2019/01/24-fondo-icono.jpg" alt="" class="wp-image-4512" srcset="https://danisanchez.net/wp-content/uploads/2019/01/24-fondo-icono.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/24-fondo-icono-300x208.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/24-fondo-icono-768x533.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Ya solamente queda generar la APK.</p>



<p class="wp-block-paragraph">Para ello tenemos dos opciones, generar una APK sencilla lista para instalar en cualquier dispositivo manualmente, o crear una APK firmada para el caso en que queramos publicarla en Google Play.</p>



<ul class="wp-block-list"><li><strong>Generar la APK simple:&nbsp;</strong>Nos dirimos al menú Build &#8211; Build Bundle(s) / APK/s) &#8211; Buid APK(s):</li></ul>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="900" height="505" src="https://danisanchez.net/wp-content/uploads/2019/01/26-apk-sin-firmar-creada.jpg" alt="" class="wp-image-4517" srcset="https://danisanchez.net/wp-content/uploads/2019/01/26-apk-sin-firmar-creada.jpg 900w, https://danisanchez.net/wp-content/uploads/2019/01/26-apk-sin-firmar-creada-300x168.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/26-apk-sin-firmar-creada-768x431.jpg 768w" sizes="auto, (max-width: 900px) 100vw, 900px" /></figure></div>



<p class="wp-block-paragraph">Una vez construida la APK aparecerá el mensaje donde podremos localizarla haciendo clic en «locate», pero si el mensaje desaparece, la APK generalmente se guardará en la ruta de tu proyecto: <strong>TuAplicacion / app / build / outputs / apk / debug </strong></p>



<ul class="wp-block-list"><li><strong>Generar la APK firmada: </strong>Nos dirigimos al menú Build &#8211; Generate Signed Bundle or APK y escogemos la opción <strong>Android App Bundle.</strong></li></ul>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="626" height="374" src="https://danisanchez.net/wp-content/uploads/2019/01/29-generar-apk-firmada.jpg" alt="" class="wp-image-4513" srcset="https://danisanchez.net/wp-content/uploads/2019/01/29-generar-apk-firmada.jpg 626w, https://danisanchez.net/wp-content/uploads/2019/01/29-generar-apk-firmada-300x179.jpg 300w" sizes="auto, (max-width: 626px) 100vw, 626px" /></figure></div>



<p class="wp-block-paragraph">Ahora nos pedirá que seleccionemos un certificado o firma digital para la aplicación:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="716" height="374" src="https://danisanchez.net/wp-content/uploads/2019/01/30-indicar-certificado.jpg" alt="" class="wp-image-4514" srcset="https://danisanchez.net/wp-content/uploads/2019/01/30-indicar-certificado.jpg 716w, https://danisanchez.net/wp-content/uploads/2019/01/30-indicar-certificado-300x157.jpg 300w" sizes="auto, (max-width: 716px) 100vw, 716px" /></figure></div>



<p class="wp-block-paragraph">Si es la primera vez que hacemos este paso en Android Studio, tendremos que crear una firma digital para nuestra aplicación. Esta firma nos reconoce a nosotros como autores legítimos de la aplicación y es necesaria para poder publicar en Google Play:</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="539" height="538" src="https://danisanchez.net/wp-content/uploads/2019/01/31-crear-certificado.jpg" alt="" class="wp-image-4515" srcset="https://danisanchez.net/wp-content/uploads/2019/01/31-crear-certificado.jpg 539w, https://danisanchez.net/wp-content/uploads/2019/01/31-crear-certificado-300x300.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/01/31-crear-certificado-150x150.jpg 150w" sizes="auto, (max-width: 539px) 100vw, 539px" /></figure></div>



<p class="wp-block-paragraph">Rellenamos los datos para el certificado y finalizamos.</p>



<p class="wp-block-paragraph">Podríamos extendernos mucho más sobre el tema, pero creo que lo esencial está explicado y es suficiente para empezar (y llevamos casi 1500 palabras de artículo!).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/crear-webview-con-android-studio-para-cargar-una-web-en-una-app-android/feed/</wfw:commentRss>
			<slash:comments>71</slash:comments>
		
		
			</item>
	</channel>
</rss>
