<?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>php &#8211; danisanchez.net</title>
	<atom:link href="https://danisanchez.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Sat, 11 Dec 2021 18:35:22 +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>php &#8211; danisanchez.net</title>
	<link>https://danisanchez.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tu alojamiento web no es compatible con la rotación de imágenes. [Solución]</title>
		<link>https://danisanchez.net/tu-alojamiento-web-no-es-compatible-con-la-rotacion-de-imagenes-solucion/</link>
					<comments>https://danisanchez.net/tu-alojamiento-web-no-es-compatible-con-la-rotacion-de-imagenes-solucion/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Sat, 11 Dec 2021 18:35:22 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=12042</guid>

					<description><![CDATA[Puede que en alguna ocasión trabajando en una instalación de WordPress te encuentres con el siguiente error: «Tu alojamiento web no es compatible con la rotación de imágenes. Por lo que no podrás editar imágenes desde WordPress, como por ejemplo, escalarlas, cambiar la relación de aspecto, etc. También puede ser un problema si estás trabajando [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Puede que en alguna ocasión trabajando en una instalación de WordPress te encuentres con el siguiente error: «Tu alojamiento web no es compatible con la rotación de imágenes.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1022" height="516" src="https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes.jpg" alt="" class="wp-image-12043" srcset="https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes.jpg 1022w, https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-300x151.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-768x388.jpg 768w" sizes="(max-width: 1022px) 100vw, 1022px" /></figure>



<p class="wp-block-paragraph">Por lo que no podrás editar imágenes desde WordPress, como por ejemplo, escalarlas, cambiar la relación de aspecto, etc. También puede ser un problema si estás trabajando con algún builder como Elementor o Divi, ya que no podrás manipular correctamente las imágenes.</p>



<p class="wp-block-paragraph">El problema es la falta de algunos complementos de PHP que necesitan ser instalados en el servidor, en concreto los paquetes:</p>



<ul class="wp-block-list"><li>php-gd</li><li>php-imagick</li></ul>



<p class="wp-block-paragraph">Si estamos trabajando en un servidor online, debemos pedir a nuestro proveedor que instale estos complementos (sería muy raro que no estuviesen instalados, pero cualquiera sabe&#8230;).</p>



<p class="wp-block-paragraph">En el caso de que estés usando una instalación LAMP en local, instala los paquetes desde tu repositorio:</p>



<p class="wp-block-paragraph">Ubuntu/Debian:</p>



<pre class="wp-block-code"><code>sudo apt install php-gd php-imagick</code></pre>



<p class="wp-block-paragraph">Arch/Manjaro:</p>



<pre class="wp-block-code"><code>sudo pacman -S php-gd php-imagick</code></pre>



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



<pre class="wp-block-code"><code>sudo dnf install php-gd php-imagick</code></pre>



<p class="wp-block-paragraph">Además hay que habilitar la extensión de php-gd desde el archivo de configuración php.ini</p>



<p class="wp-block-paragraph">Ubuntu/Debian:</p>



<pre class="wp-block-code"><code>sudo nano /etc/php/X.X/apache2/php.ini</code></pre>



<p class="wp-block-paragraph">Arch/Manjaro:</p>



<pre class="wp-block-code"><code>sudo nano /etc/php/php.ini</code></pre>



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



<pre class="wp-block-code"><code>sudo nano /etc/php.ini</code></pre>



<p class="wp-block-paragraph">Y descomentar la línea:</p>



<pre class="wp-block-code"><code>extension=gd</code></pre>



<p class="wp-block-paragraph">Reiniciar el servidor y listo.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1014" height="515" src="https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-02.jpg" alt="" class="wp-image-12045" srcset="https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-02.jpg 1014w, https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-02-300x152.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/error-alojamiento-no-permite-rotacion-imagenes-02-768x390.jpg 768w" sizes="(max-width: 1014px) 100vw, 1014px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/tu-alojamiento-web-no-es-compatible-con-la-rotacion-de-imagenes-solucion/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Instalar LAMP en Manjaro (Linux, Apache, MySQL y PHP)</title>
		<link>https://danisanchez.net/instalar-lamp-en-manjaro-linux-apache-mysql-y-php/</link>
					<comments>https://danisanchez.net/instalar-lamp-en-manjaro-linux-apache-mysql-y-php/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 07 Dec 2021 08:54:12 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[manjaro]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=11987</guid>

					<description><![CDATA[Introducción Como ya he comentado en algún post, Manjaro es una de mis distros favoritas. Una Arch Rolling con un entorno de escritorio a prueba de bombas (XFCE). Sin embargo siempre me muevo en la rama Debian-Ubuntu estable. Uno de los principales motivos es el Stack LAMP (Linux Apache MySQL PHP). Trabajo a menudo con [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Introducción</h2>



<p class="wp-block-paragraph">Como ya he comentado en algún post, Manjaro es una de mis distros favoritas. Una<em> Arch Rolling</em> con un entorno de escritorio a prueba de bombas (XFCE). </p>



<p class="wp-block-paragraph">Sin embargo siempre me muevo en la rama Debian-Ubuntu estable. Uno de los principales motivos es el Stack LAMP (Linux Apache MySQL PHP). Trabajo a menudo con proyectos web en local, casi siempre webs con problemas que tengo que analizar y reparar antes de aplicar los cambios en producción.</p>



<p class="wp-block-paragraph">La instalación del Stack LAMP en Debian-Ubuntu es bastante sencilla, aquí puedes ver un artículo que escribí hace un par de años y que a día de hoy sigue vigente (lo único que cambia es la versión de PHP).</p>



<figure class="wp-block-embed aligncenter is-type-wp-embed is-provider-danisanchez-net wp-block-embed-danisanchez-net"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="GBrrs0dMcJ"><a href="https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-gnu-linux-ubuntu-y-derivadas/">Instalar LAMP (Linux, Apache, MySQL y PHP) en GNU/Linux (Ubuntu y derivadas)</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="«Instalar LAMP (Linux, Apache, MySQL y PHP) en GNU/Linux (Ubuntu y derivadas)» — Dani Sánchez" src="https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-gnu-linux-ubuntu-y-derivadas/embed/#?secret=ckfyQVqgUp#?secret=GBrrs0dMcJ" data-secret="GBrrs0dMcJ" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph">Pero siempre que he intentado instalar LAMP en otras ramas, como RPM o ARCH, he tenido diversos problemas para hacerlo funcionar, desistiendo y volviendo a mi zona de confort.</p>



<p class="wp-block-paragraph">Hace poco me lié la manda a la cabeza para instalarlo en Fedora, con excelente resultado (puedes ver el artículo completo).</p>



<figure class="wp-block-embed aligncenter is-type-wp-embed is-provider-danisanchez-net wp-block-embed-danisanchez-net"><div class="wp-block-embed__wrapper">
https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-fedora-34/
</div></figure>



<p class="wp-block-paragraph">Pero en Manjaro, aunque tiene algunas similitudes con Fedora, hay que dar algunos pasos más, sobre todo en lo que a configuración de archivos se refiere. </p>



<p class="wp-block-paragraph">Como siempre, este artículo no solo está hecho para quien lo necesite, si no para mí mismo, tenerlo como referencia para cuando necesite volver a realizar una instalación, sin tener que buscar en varios posts por la Red. Vamos al lío&#8230;</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 loading="lazy" width="100%" height="400" src="https://www.youtube-nocookie.com/embed/0Dk1cNf4qaw" 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">Instalar el servidor web Apache</h2>



<p class="wp-block-paragraph">Abrimos un terminal e instalamos el paquete <strong>apache</strong>.</p>



<pre class="wp-block-code"><code>sudo pacman -S apache</code></pre>



<p class="wp-block-paragraph">Una vez instalado, vamos a revisar el archivo de configuración de Apache para comprobar que el módulo <em>unique_id_module</em> está comentado:</p>



<p class="wp-block-paragraph">Para ello desde el terminal abrimos con el editor nano el archivo:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/httpd.conf</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="736" height="364" src="https://danisanchez.net/wp-content/uploads/2021/12/01-manjaro-en-linux.jpg" alt="" class="wp-image-11993" srcset="https://danisanchez.net/wp-content/uploads/2021/12/01-manjaro-en-linux.jpg 736w, https://danisanchez.net/wp-content/uploads/2021/12/01-manjaro-en-linux-300x148.jpg 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">Para buscar en nano puedes usar la combinación Ctrl+W y escribir el texto a buscar:</p>



<p class="wp-block-paragraph">Esta es la línea que tenemos que mantener comentada (anteponiéndole un #)</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="757" height="535" src="https://danisanchez.net/wp-content/uploads/2021/12/02-manjaro-en-linux-1.jpg" alt="" class="wp-image-11995" srcset="https://danisanchez.net/wp-content/uploads/2021/12/02-manjaro-en-linux-1.jpg 757w, https://danisanchez.net/wp-content/uploads/2021/12/02-manjaro-en-linux-1-300x212.jpg 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></figure>



<p class="wp-block-paragraph">Si ya estaba comentada, simplemente podemos salir pulsando Ctrl+X. Para guardar pulsa Ctrl+O.</p>



<p class="wp-block-paragraph">Ahora podemos habilitar el servicio de apache con el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl enable httpd</code></pre>



<p class="wp-block-paragraph">E iniciarlo con el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl start httpd</code></pre>



<p class="wp-block-paragraph">Si necesitamos reiniciar apache porque hayamos hecho algún cambio en la configuración, usamos el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">No obstante, si queremos detener el servicio tecleamos el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl stop httpd</code></pre>



<p class="wp-block-paragraph">Para comprobar que apache está corriendo, usa el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl status httpd</code></pre>



<p class="wp-block-paragraph">Debería aparecer <strong>active (running)</strong>:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="755" height="531" src="https://danisanchez.net/wp-content/uploads/2021/12/03-manjaro-en-linux.jpg" alt="" class="wp-image-11997" srcset="https://danisanchez.net/wp-content/uploads/2021/12/03-manjaro-en-linux.jpg 755w, https://danisanchez.net/wp-content/uploads/2021/12/03-manjaro-en-linux-300x211.jpg 300w" sizes="auto, (max-width: 755px) 100vw, 755px" /></figure>



<p class="wp-block-paragraph">Para salir del monitor de estado de apache puedes detener con Ctrl+Z.</p>



<p class="wp-block-paragraph">También podemos abrir un navegador web y dirigirnos a la ruta http://localhost Debería aparecer el índice de apache (que en estos momentos estará vacío):</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="330" height="143" src="https://danisanchez.net/wp-content/uploads/2021/12/04-manjaro-en-linux-1.jpg" alt="" class="wp-image-11999" srcset="https://danisanchez.net/wp-content/uploads/2021/12/04-manjaro-en-linux-1.jpg 330w, https://danisanchez.net/wp-content/uploads/2021/12/04-manjaro-en-linux-1-300x130.jpg 300w" sizes="auto, (max-width: 330px) 100vw, 330px" /></figure>



<p class="wp-block-paragraph">Hemos terminado con apache, ahora instalaremos el gestor de bases de datos MySQL:</p>



<h2 class="wp-block-heading">Instalar MySQL (MariaDB)</h2>



<p class="wp-block-paragraph">Nos dirigimos al terminal e instalamos el paquete <strong>mysql</strong>:</p>



<pre class="wp-block-code"><code>sudo pacman -S mysql</code></pre>



<p class="wp-block-paragraph">Nos avisará de que existen dos proveedores disponibles para instalar mysql. Vamos a elegir la opción 1) mariadb:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="758" height="305" src="https://danisanchez.net/wp-content/uploads/2021/12/05-manjaro-en-linux.jpg" alt="" class="wp-image-12000" srcset="https://danisanchez.net/wp-content/uploads/2021/12/05-manjaro-en-linux.jpg 758w, https://danisanchez.net/wp-content/uploads/2021/12/05-manjaro-en-linux-300x121.jpg 300w" sizes="auto, (max-width: 758px) 100vw, 758px" /></figure>



<p class="wp-block-paragraph"><strong>IMPORTANTE</strong>: Antes de habilitar el servicio de mysql tenemos que inicializar el directorio de datos de MariaDB. Este paso no es necesario en otras ramas como Debian-Ubuntu o Fedora, pero en Manjaro (o la rama Arch en general) si.</p>



<p class="wp-block-paragraph">Para ello copiamos/pegamos el siguiente comando:</p>



<pre class="wp-block-code"><code>sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="759" height="721" src="https://danisanchez.net/wp-content/uploads/2021/12/06-manjaro-en-linux.jpg" alt="" class="wp-image-12001" srcset="https://danisanchez.net/wp-content/uploads/2021/12/06-manjaro-en-linux.jpg 759w, https://danisanchez.net/wp-content/uploads/2021/12/06-manjaro-en-linux-300x285.jpg 300w" sizes="auto, (max-width: 759px) 100vw, 759px" /></figure>



<p class="wp-block-paragraph">Ahora podemos habilitar e iniciar mysql:</p>



<pre class="wp-block-code"><code>sudo systemctl enable mysql</code></pre>



<pre class="wp-block-code"><code>sudo systemctl start mysql</code></pre>



<p class="wp-block-paragraph">Igual que con apache, tenemos los comandos <strong>restart</strong> y <strong>stop</strong> para reiniciar o detener mysql.</p>



<p class="wp-block-paragraph">Vamos a comprobar el estado de mysql con el comando:</p>



<pre class="wp-block-code"><code>sudo systemctl status mysql</code></pre>



<p class="wp-block-paragraph">Al igual que con apache, debería aparecer <strong>Active: active (running)</strong>:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="757" height="592" src="https://danisanchez.net/wp-content/uploads/2021/12/07-manjaro-en-linux.jpg" alt="" class="wp-image-12007" srcset="https://danisanchez.net/wp-content/uploads/2021/12/07-manjaro-en-linux.jpg 757w, https://danisanchez.net/wp-content/uploads/2021/12/07-manjaro-en-linux-300x235.jpg 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></figure>



<p class="wp-block-paragraph">Detenemos el monitor de estado de mysql con Ctrl+Z.</p>



<p class="wp-block-paragraph">Ahora toca securizar mysql ya que por defecto únicamente viene con el usuario root sin contraseña:</p>



<pre class="wp-block-code"><code>sudo mysql_secure_installation</code></pre>



<p class="wp-block-paragraph">Nos pedirá nuestra contraseña de root (de sistema):</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="757" height="337" src="https://danisanchez.net/wp-content/uploads/2021/12/08-manjaro-en-linux.jpg" alt="" class="wp-image-12008" srcset="https://danisanchez.net/wp-content/uploads/2021/12/08-manjaro-en-linux.jpg 757w, https://danisanchez.net/wp-content/uploads/2021/12/08-manjaro-en-linux-300x134.jpg 300w" sizes="auto, (max-width: 757px) 100vw, 757px" /></figure>



<p class="wp-block-paragraph">Ahora nos pregunta si queremos darle una contraseña a la cuenta root de mysql, respondemos que si (Y):</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="759" height="345" src="https://danisanchez.net/wp-content/uploads/2021/12/09-manjaro-en-linux.jpg" alt="" class="wp-image-12009" srcset="https://danisanchez.net/wp-content/uploads/2021/12/09-manjaro-en-linux.jpg 759w, https://danisanchez.net/wp-content/uploads/2021/12/09-manjaro-en-linux-300x136.jpg 300w" sizes="auto, (max-width: 759px) 100vw, 759px" /></figure>



<pre class="wp-block-code"><code>Change the root password? &#91;Y/n] Y</code></pre>



<p class="wp-block-paragraph">Respondemos que si (Y).</p>



<pre class="wp-block-code"><code>New password: **********
Re-enter new password: **********</code></pre>



<p class="wp-block-paragraph">Al resto de preguntas podemos responder que si:</p>



<pre class="wp-block-code"><code>Remove anonymous users? &#91;Y/n] Y</code></pre>



<pre class="wp-block-code"><code>Disallow root login remotely? &#91;Y/n] Y</code></pre>



<pre class="wp-block-code"><code>Remove test database and access to it? &#91;Y/n] Y</code></pre>



<pre class="wp-block-code"><code>Reload privilege tables now? &#91;Y/n] Y</code></pre>



<pre class="wp-block-code"><code>Thanks por using MariaDB!</code></pre>



<p class="wp-block-paragraph">Entramos en MySQL:</p>



<pre class="wp-block-code"><code>sudo mysql -u root</code></pre>



<p class="wp-block-paragraph">Vamos a crear un nuevo usuario distinto al de root que será el que asignemos a las bases de datos que creemos posteriormente:</p>



<pre class="wp-block-code"><code>CREATE USER mi_usuario IDENTIFIED BY 'contraseña';</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="818" height="381" src="https://danisanchez.net/wp-content/uploads/2021/12/10-manjaro-en-linux.jpg" alt="" class="wp-image-12012" srcset="https://danisanchez.net/wp-content/uploads/2021/12/10-manjaro-en-linux.jpg 818w, https://danisanchez.net/wp-content/uploads/2021/12/10-manjaro-en-linux-300x140.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/10-manjaro-en-linux-768x358.jpg 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /></figure>



<p class="wp-block-paragraph">Podemos salir de MySQL con el comando exit:</p>



<pre class="wp-block-code"><code>MariaDB &#91;(none)]&gt; exit;
<strong>Bye</strong></code></pre>



<h2 class="wp-block-heading">Instalación y configuración de PHP</h2>



<p class="wp-block-paragraph">Desde el terminal instalamos la paquetería php y php-apache</p>



<pre class="wp-block-code"><code>sudo pacman -S php php-apache php-gd php-imagick</code></pre>



<p class="wp-block-paragraph"><strong>php-gd y php-imagick</strong> son opcionales, pero los necesitaremos para poder manipular imágenes en WordPress.</p>



<p class="wp-block-paragraph">Como Manjaro es una versión contínua (rolling-release), la versión de PHP será la que haya disponible en el momento que realices la intalación.</p>



<p class="wp-block-paragraph">A la hora de escribir este artículo, la versión instalada es la 8.0.12.</p>



<p class="wp-block-paragraph">Puedes comprobar la versión instalada con el comando php -v:</p>



<pre class="wp-block-code"><code><strong>&#91;dani@ThinkPad-T540p ~]$</strong> php -v
PHP 8.0.12 (cli) (built: Oct 20 2021 16:06:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.12, Copyright (c) Zend Technologies</code></pre>



<p class="wp-block-paragraph">Es necesario habilitar y deshabilitar algunos módulos de apache para que PHP8 funcione correctamente en Manjaro:</p>



<ul class="wp-block-list"><li><strong>LoadModule mpm_event_module modules/mod_mpm_event.so (DESHABILITADO).</strong></li><li><strong>LoadModule mpm_prefork_module modules/mod_mpm_prefork.so (HABILITADO).</strong></li></ul>



<p class="wp-block-paragraph">Para ello vamos al archivo de configuración de apache:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph">Y localizamos los dos módulos anteriores, comentando el primero y descomentando (o añadiendo si no está) el segundo.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="818" height="515" src="https://danisanchez.net/wp-content/uploads/2021/12/12-manjaro-en-linux.jpg" alt="" class="wp-image-12018" srcset="https://danisanchez.net/wp-content/uploads/2021/12/12-manjaro-en-linux.jpg 818w, https://danisanchez.net/wp-content/uploads/2021/12/12-manjaro-en-linux-300x189.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/12-manjaro-en-linux-768x484.jpg 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /></figure>



<p class="wp-block-paragraph">Ahora añadimos al final del archivo las siguientes líneas:</p>



<pre class="wp-block-code"><code>LoadModule php_module modules/libphp.so
AddHandler php-script php
Include conf/extra/php_module.conf</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="818" height="515" src="https://danisanchez.net/wp-content/uploads/2021/12/13-manjaro-en-linux.jpg" alt="" class="wp-image-12019" srcset="https://danisanchez.net/wp-content/uploads/2021/12/13-manjaro-en-linux.jpg 818w, https://danisanchez.net/wp-content/uploads/2021/12/13-manjaro-en-linux-300x189.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/13-manjaro-en-linux-768x484.jpg 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /></figure>



<p class="wp-block-paragraph">Guardamos con Ctrl+O y salimos con Ctrl+X.</p>



<p class="wp-block-paragraph">Reiniciamos apache para que se apliquen los cambios.</p>



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">Vamos a probar que PHP funciona correctamente. Para ello vamos a crear un archivo info.php dentro de la carpeta raíz de proyectos de Apache que en Manjaro se encuentra en la ruta <strong>/srv/http</strong>:</p>



<pre class="wp-block-code"><code>sudo nano /srv/http/info.php</code></pre>



<p class="wp-block-paragraph">Y dentro llamamos a la función phpinfo();</p>



<pre class="wp-block-code"><code>&lt;?php
    phpinfo();
?&gt;</code></pre>



<p class="wp-block-paragraph">Guardamos, salimos de nano y nos dirigimos al navegador web, hacia la dirección http://localhost/info.php, donde tendrá que aparecer una pantalla como esta:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="952" height="867" src="https://danisanchez.net/wp-content/uploads/2021/12/14-manjaro-en-linux.jpg" alt="" class="wp-image-12021" srcset="https://danisanchez.net/wp-content/uploads/2021/12/14-manjaro-en-linux.jpg 952w, https://danisanchez.net/wp-content/uploads/2021/12/14-manjaro-en-linux-300x273.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/14-manjaro-en-linux-768x699.jpg 768w" sizes="auto, (max-width: 952px) 100vw, 952px" /></figure>



<p class="wp-block-paragraph">Esto significa que tanto Apache como PHP están corriendo correctamente.</p>



<p class="wp-block-paragraph">Ahora, para gestionar las bases de datos de forma más cómoda, vamos a instalar y configurar <strong>phpMyAdmin</strong>, que en Manjaro también requiere de algunas configuraciones adicionales.</p>



<h2 class="wp-block-heading">Instalar y configurar phpMyAdmin</h2>



<p class="wp-block-paragraph">Instalamos el paquete desde un terminal:</p>



<pre class="wp-block-code"><code>sudo pacman -S phpmyadmin</code></pre>



<p class="wp-block-paragraph">Antes de ejecutarlo necesitamos hacer algunas configuraciones en el archivo php.ini situado en la ruta /etc/php/php.ini:</p>



<pre class="wp-block-code"><code>sudo nano /etc/php/php.ini</code></pre>



<p class="wp-block-paragraph">Y descomentamos las siguientes líneas (eliminando el # o el ; del inicio):</p>



<pre class="wp-block-code"><code>extension=bz2
extension=gd
extension=mysqli
extension=iconv
extension=pdo_mysql</code></pre>



<p class="wp-block-paragraph">Ya que estamos, podemos aprovechar y modificar algunos parámetros para mejorar la experiencia con WordPress o cualquier otro CMS. Los parámetros mínimos aconsejables serían:</p>



<pre class="wp-block-code"><code>memory_limit = 128M
post_max_size = 64M
max_execution_time = 180
upload_max_filesize = 64M
max_input_time = 180
max_input_vars = 3000</code></pre>



<p class="wp-block-paragraph">Los localizamos con Ctrl+W y los modificamos uno a uno.</p>



<p class="wp-block-paragraph">Tras finalizar, guardamos con Ctrl+O y salimos con Ctrl+X.</p>



<p class="wp-block-paragraph">Y reiniciamos apache ara que se aplique los cambios:</p>



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">Ahora necesitamos crear un archivo de configuración para phpMyAdmin que situaremos en la ruta:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/extra/phpmyadmin.conf</code></pre>



<p class="wp-block-paragraph">Y dentro insertamos las siguientes líneas:</p>



<pre class="wp-block-code"><code>Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"
&lt;Directory "/usr/share/webapps/phpMyAdmin"&gt;
DirectoryIndex index.php
AllowOverride All
Options FollowSymlinks
Require all granted
&lt;/Directory&gt;</code></pre>



<p class="wp-block-paragraph">Guardamos y salimos.</p>



<p class="wp-block-paragraph">Volvemos al archivo de configuración de Apache:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph">Y al final del archivo añadimos la siguiente línea:</p>



<pre class="wp-block-code"><code>Include conf/extra/phpmyadmin.conf</code></pre>



<p class="wp-block-paragraph">Ya estaríamos listos para inciar phpMyAdmin, pero para evitar que aparezcan algunos mensajes de error, configuraremos la frase secreta del panel editando:</p>



<pre class="wp-block-code"><code>sudo nano /etc/webapps/phpmyadmin/config.inc.php</code></pre>



<p class="wp-block-paragraph">Y localizamos la línea:</p>



<pre class="wp-block-code"><code>$cfg&#91;'blowfish_secret'] = 'ESCRIBE_UNA_CLAVE_LARGA_Y_COMPLEJA'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH!$ /**</code></pre>



<p class="wp-block-paragraph">Y al final del archivo añadimos:</p>



<pre class="wp-block-code"><code>$cfg&#91;'TempDir'] = '/tmp/phpmyadmin';</code></pre>



<p class="wp-block-paragraph">Reiniciamos Apache.</p>



<p class="wp-block-paragraph">Abrimos el navegador y nos dirigimos a http://localhost/phpmyadmin, donde deberíamos ver la pantalla de login:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="390" height="437" src="https://danisanchez.net/wp-content/uploads/2021/12/15-manjaro-en-linux.jpg" alt="" class="wp-image-12026" srcset="https://danisanchez.net/wp-content/uploads/2021/12/15-manjaro-en-linux.jpg 390w, https://danisanchez.net/wp-content/uploads/2021/12/15-manjaro-en-linux-268x300.jpg 268w" sizes="auto, (max-width: 390px) 100vw, 390px" /></figure>
</div>


<p class="wp-block-paragraph">Por último vamos a habilitar el modulo ReWrite en Apache para que  podamos habilitar las URLs amigables en WordPress (en los enlaces permanentes).</p>



<h2 class="wp-block-heading">Habilitar mod_rewrite para URLs amigables en WordPress</h2>



<p class="wp-block-paragraph">Nos dirimos al archivo de configuración de Apache:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph"> Y localizamos la parte de código donde empieza <strong>&lt;Directory «/srv/http»&gt;</strong></p>



<p class="wp-block-paragraph">Un poco mas abajo modificamos la línea:</p>



<p class="wp-block-paragraph">AllowOverride None por <strong>AllowOverride All</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="815" height="627" src="https://danisanchez.net/wp-content/uploads/2021/12/16-manjaro-en-linux.jpg" alt="" class="wp-image-12028" srcset="https://danisanchez.net/wp-content/uploads/2021/12/16-manjaro-en-linux.jpg 815w, https://danisanchez.net/wp-content/uploads/2021/12/16-manjaro-en-linux-300x231.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/12/16-manjaro-en-linux-768x591.jpg 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure>



<p class="wp-block-paragraph">Y localizamos y descomentamos la línea:</p>



<pre class="wp-block-code"><code>LoadModule rewrite_module modules/mod_rewrite.so</code></pre>



<p class="wp-block-paragraph">Reiniciamos Apache y ya tendríamos listo el Stack LAMP para Manjaro y optimizado para WordPress.</p>



<p class="wp-block-paragraph">Espero que este artículo te haya servido y lo compartas si ha sido así. 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/instalar-lamp-en-manjaro-linux-apache-mysql-y-php/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
			</item>
		<item>
		<title>Instalar LAMP (Linux, Apache, MySQL y PHP) en Fedora</title>
		<link>https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-fedora/</link>
					<comments>https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-fedora/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Thu, 28 Oct 2021 15:22:54 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=11928</guid>

					<description><![CDATA[Probado hasta Fedora 39!! Actualmente estoy probando Fedora como distro principal y tenía la necesidad de configurar mi entorno LAMP tal y como lo tenía en Ubuntu. En Fedora la paquetería difiere un poco, así como algunas configuraciones. En este artículo vamos a ver cómo: Instalar el servidor web Apache Nos dirigimos a un terminal [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="has-white-color has-text-color has-background wp-block-paragraph" style="background-color:#17a2b8"><strong>Probado hasta Fedora 39!!</strong></p>



<p class="wp-block-paragraph">Actualmente estoy probando Fedora como distro principal y tenía la necesidad de configurar mi entorno LAMP tal y como lo tenía en Ubuntu.</p>



<p class="wp-block-paragraph">En Fedora la paquetería difiere un poco, así como algunas configuraciones.</p>



<p class="wp-block-paragraph">En este artículo vamos a ver cómo:</p>



<ul class="wp-block-list">
<li>Instalar el <strong>servidor web</strong> (<strong>Apache</strong>).</li>



<li>Instalar el <strong>gestor de bases de datos MariaDB</strong>.</li>



<li>Instalar <strong>PHP</strong>.</li>



<li>Configurar <strong>php.ini</strong> con los valores óptimos para WordPress.</li>



<li>Instalar <strong>phpMyAdmin</strong> para gestionar las bases de datos visualmente.</li>



<li>Activar el módulo <strong>MOD REWRITE</strong> para que funcionen las URLs «amigables» en WordPress.</li>
</ul>



<h2 class="wp-block-heading">Instalar el servidor web Apache</h2>



<p class="wp-block-paragraph">Nos dirigimos a un terminal y escribimos:</p>



<pre class="wp-block-code"><code>sudo dnf -y install httpd</code></pre>



<p class="wp-block-paragraph">Los comandos básicos para gestionar el servidor son:</p>



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



<pre class="wp-block-code"><code>sudo systemctl start httpd</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl stop httpd</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl enable httpd</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl reload httpd</code></pre>



<p class="wp-block-paragraph">Una vez instalado, ejecutamos los comandos de <strong>habilitar</strong> e <strong>iniciar:</strong></p>



<pre class="wp-block-code"><code>sudo systemctl enable httpd
sudo systemctl start httpd</code></pre>



<p class="wp-block-paragraph">Nos dirigimos a un navegador web y entramos en http://localhost</p>



<p class="wp-block-paragraph">Deberíamos ver una pantalla como esta:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="546" src="https://danisanchez.net/wp-content/uploads/2021/10/01-lamp-fedora.jpg" alt="" class="wp-image-11929" srcset="https://danisanchez.net/wp-content/uploads/2021/10/01-lamp-fedora.jpg 1000w, https://danisanchez.net/wp-content/uploads/2021/10/01-lamp-fedora-300x164.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/10/01-lamp-fedora-768x419.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">En mi caso, una vez que se habilita e inicia el servidor por primera vez, ya no es necesario hacerlo en cada sesión.</p>



<h2 class="wp-block-heading">Instalar MySQL (MariaDB)</h2>



<p class="wp-block-paragraph">De vuelta al terminal ejecutamos:</p>



<pre class="wp-block-code"><code>sudo dnf install mariadb-server</code></pre>



<p class="wp-block-paragraph">Los comandos para gestionar el servicio son muy similares a Apache.</p>



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



<pre class="wp-block-code"><code>sudo systemctl enable mariadb</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl start mariadb</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl stop mariadb</code></pre>



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



<pre class="wp-block-code"><code>sudo systemctl restart mariadb</code></pre>



<p class="wp-block-paragraph">Al igual que con Apache, en mi caso no es necesario habilitar e iniciar el servicio en cada sesión.</p>



<h3 class="wp-block-heading">Securizar MySQL</h3>



<p class="wp-block-paragraph">Por defecto, el gestor de bases de datos viene con el usuario root sin contraseña. Vamos a asignar una contraseña ejecutando:</p>



<pre class="wp-block-code"><code>sudo mysql_secure_installation</code></pre>



<p class="wp-block-paragraph">Nos preguntará si queremos asignar una contraseña al usuario root, contestamos que si:</p>



<pre class="wp-block-code"><code>Set root password? &#91;Y/n] y
New password: *******
Re-enter new password: ****** 
Password updated successfully!</code></pre>



<p class="wp-block-paragraph">Nos hará una serie de preguntas sobre si queremos eliminar usuarios anónimos, borrar las tablas de test, etc. Podemos contestar afimartívamente a todo:</p>



<pre class="wp-block-code"><code>Remove anonymous users? &#91;Y/n] y
 ... Success!
 
 Disallow root login remotely? &#91;Y/n] y
 ... Success!
 
 Remove test database and access to it? &#91;Y/n] y
 - Dropping test database...
 ... Success!
 
 - Removing privileges on test database...
 ... Success!
 
 Reload privilege tables now? &#91;Y/n] y
 ... Success!</code></pre>



<p class="wp-block-paragraph">Ahora entraremos en mysql:</p>



<pre class="wp-block-code"><code>sudo mysql -u root</code></pre>



<p class="wp-block-paragraph">Vamos a crear un usuario distinto de root que será el que asignemos a las bases de datos que creemos después:</p>



<pre class="wp-block-code"><code>CREATE USER mi_usuario IDENTIFIED BY 'password';</code></pre>



<p class="wp-block-paragraph">Creamos una nueva base de datos:</p>



<pre class="wp-block-code"><code>CREATE DATABASE mibase;</code></pre>



<p class="wp-block-paragraph">Y asignamos nuestro usuario anterior a la nueva base de datos con todos los privilegios:</p>



<pre class="wp-block-code"><code>GRANT ALL PRIVILEGES ON mibase.* TO mi_usuario;</code></pre>



<p class="wp-block-paragraph">Para nuevas bases de datos el proceso sería el mismo: Crear la base de datos y asignar nuestro usuario con todos los privilegios.</p>



<p class="wp-block-paragraph">Tras la asignación de nuestro usuario a la nueva base de datos no está de más hacer una limpieza de la caché almacenada con:</p>



<pre class="wp-block-code"><code>FLUSH PRIVILEGES;</code></pre>



<h2 class="wp-block-heading">Instalar PHP</h2>



<p class="wp-block-paragraph">Vamos a instalar los siguientes paquetes para PHP:</p>



<pre class="wp-block-code"><code>sudo dnf -y install php php-cli php-php-gettext php-mbstring php-mcrypt php-mysqlnd php-pear php-curl php-gd php-xml php-bcmath php-zip</code></pre>



<p class="wp-block-paragraph">Tras la instalación vamos a comprobar la versión de PHP con el comando:</p>



<pre class="wp-block-code"><code>php -v</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="738" height="214" src="https://danisanchez.net/wp-content/uploads/2021/10/02-lamp-fedora-php-versioin.jpg" alt="" class="wp-image-11936" srcset="https://danisanchez.net/wp-content/uploads/2021/10/02-lamp-fedora-php-versioin.jpg 738w, https://danisanchez.net/wp-content/uploads/2021/10/02-lamp-fedora-php-versioin-300x87.jpg 300w" sizes="auto, (max-width: 738px) 100vw, 738px" /></figure>



<p class="wp-block-paragraph">En el momento de hacer este artículo, la versión que se instala con Fedora 34 es la 7.4.24.</p>



<p class="wp-block-paragraph">Crearemos un archivo test.php para comprobar que PHP se ejecuta correctamente bajo Apache.</p>



<p class="wp-block-paragraph">A mí me gusta usar <em>nano</em> para configurar archivos sencillos mediante la terminal, nos dirigimos a:</p>



<pre class="wp-block-code"><code>sudo nano /var/www/html/test.php</code></pre>



<p class="wp-block-paragraph">Y dentro pegamos la siguiente línea:</p>



<pre class="wp-block-code"><code>&lt;?php phpinfo(); ?&gt;</code></pre>



<p class="wp-block-paragraph">Guardamos los cambios con <em>Ctrl+O</em> y salimos con <em>Ctrl+X</em>.</p>



<p class="wp-block-paragraph">Volvemos al navegador web a la dirección http://localhost/test.php</p>



<p class="wp-block-paragraph">Debería ejecutarse el script de información de PHP:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test-1024x559.jpg" alt="" class="wp-image-11937" srcset="https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test-1024x559.jpg 1024w, https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test-300x164.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test-768x419.jpg 768w, https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test-1536x838.jpg 1536w, https://danisanchez.net/wp-content/uploads/2021/10/03-lamp-fedora-php-test.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Vamos a cambiar algunos parámetros de PHP editando su archivo de configuración (php.ini) para optimizarlo para WordPress.</p>



<p class="wp-block-paragraph">La ubicación está en /etc/php.ini, por lo que de nuevo con <em>nano</em>, nos dirigimos a:</p>



<pre class="wp-block-code"><code>sudo nano /etc/php.ini</code></pre>



<p class="wp-block-paragraph">Y editamos los siguiente parámetros:</p>



<pre class="wp-block-code"><code>memory_limit = 128M
post_max_size = 64M
max_execution_time = 180
upload_max_filesize = 64M
max_input_time = 180
max_input_vars = 3000</code></pre>



<p class="wp-block-paragraph">Tras la edición debemos reiniciar Apache para que los cambios surjan efecto. <strong>En mi caso tuve que reiniciar el PC por completo para que se aplicaran</strong>. </p>



<h2 class="wp-block-heading">Instalar phpMyAdmin</h2>



<p class="wp-block-paragraph">Volvemos al terminal y ejecutamos:</p>



<pre class="wp-block-code"><code>sudo dnf install phpmyadmin</code></pre>



<p class="wp-block-paragraph">Tras la instalación veremos que si accedemos a http://localhost/phpmyadmin nos saldrá un mensaje de error indicando que la ubicación no existe. </p>



<p class="wp-block-paragraph">Tenemos que editar el archivo de configuración de phpMyAdmin de nuevo con <em>nano</em>:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf.d/phpMyAdmin.conf</code></pre>



<p class="wp-block-paragraph">Hacia la parte final del archivo, añadimos las siguientes líneas:</p>



<pre class="wp-block-code"><code>&lt;Directory /usr/share/phpMyAdmin&gt;
    AddDefaultCharset UTF-8
    Require all granted
&lt;/Directory&gt;</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="810" height="592" src="https://danisanchez.net/wp-content/uploads/2021/10/04-lamp-fedora-configurar-phpmyadmin.jpg" alt="" class="wp-image-11938" srcset="https://danisanchez.net/wp-content/uploads/2021/10/04-lamp-fedora-configurar-phpmyadmin.jpg 810w, https://danisanchez.net/wp-content/uploads/2021/10/04-lamp-fedora-configurar-phpmyadmin-300x219.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/10/04-lamp-fedora-configurar-phpmyadmin-768x561.jpg 768w" sizes="auto, (max-width: 810px) 100vw, 810px" /></figure>
</div>


<p class="wp-block-paragraph">Guardamos con <em>Ctrl+O</em> y salimos con <em>Ctrl+X</em>.</p>



<p class="wp-block-paragraph">Reiniciamos el servidor con:</p>



<pre class="wp-block-code"><code>sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">O reiniciamos el equipo si no surje efecto. Ahora podemos acceder a http://localhost/phpmyadmin</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin-1024x559.jpg" alt="" class="wp-image-11940" srcset="https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin-1024x559.jpg 1024w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin-300x164.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin-768x419.jpg 768w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin-1536x838.jpg 1536w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-iniciar-phpmyadmin.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Por último vamos a activar el módulo de Apache <strong>MOD REWRITE</strong> para habilitar las URLs amigables de WordPress que configuramos en los ajustes de <em>Enlaces Permanentes</em>.</p>



<p class="wp-block-paragraph">Para ello nos dirigimos con nano a:</p>



<pre class="wp-block-code"><code>sudo nano /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph">Localizamos la línea:</p>



<pre class="wp-block-code"><code>&lt;Directory "/var/www/html"&gt;</code></pre>



<p class="wp-block-paragraph">Y sustituimos AllowOverride None por <strong>AllowOverride All</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="811" height="648" src="https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-configurar-modrewrite.jpg" alt="" class="wp-image-11941" srcset="https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-configurar-modrewrite.jpg 811w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-configurar-modrewrite-300x240.jpg 300w, https://danisanchez.net/wp-content/uploads/2021/10/05-lamp-fedora-configurar-modrewrite-768x614.jpg 768w" sizes="auto, (max-width: 811px) 100vw, 811px" /></figure>



<p class="wp-block-paragraph">De nuevo, reinicia Apache o directamente el PC.</p>



<h2 class="wp-block-heading">Nota final</h2>



<p class="wp-block-paragraph">Si al descargar algún tema/plugin o actualización tienes un error de:</p>



<pre class="wp-block-code"><code>Descarga fallida: cURL error 7</code></pre>



<p class="wp-block-paragraph">Necesitamos configurar SElinux en modo permisivo. Para ello editamos el siguiente archivo:</p>



<pre class="wp-block-code"><code>sudo nano /etc/selinux/config</code></pre>



<p class="wp-block-paragraph">Y cambiamos el parámetro SELINUX=permissive</p>



<pre class="wp-block-code"><code># This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
<strong>SELINUX=permissive</strong>
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted</code></pre>



<p class="wp-block-paragraph"> Reiniciamos el equipo y eso es todo <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-lamp-linux-apache-mysql-y-php-en-fedora/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Obtener el idioma del navegador con PHP</title>
		<link>https://danisanchez.net/obtener-el-idioma-del-navegador-con-php/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Sat, 12 Sep 2020 07:04:31 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=9455</guid>

					<description><![CDATA[En PHP podemos obtener facilmente el idioma en el que nuestro usuario tiene configurado su navegador web, para en base a esto, poder tomar decisiones. Imagina que tienes una web en WordPress y quieres traducirla a varios idiomas. Puedes valerte de plugins como Loco Transtale para traducir cadenas de texto de tus plugins y temas. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En PHP podemos obtener facilmente el idioma en el que nuestro usuario tiene configurado su navegador web, para en base a esto, poder tomar decisiones.</p>



<p class="wp-block-paragraph">Imagina que tienes una web en WordPress y quieres traducirla a varios idiomas. Puedes valerte de plugins como <strong><a href="https://es.wordpress.org/plugins/loco-translate/" data-type="URL" data-id="https://es.wordpress.org/plugins/loco-translate/" target="_blank" rel="noreferrer noopener">Loco Transtale</a></strong> para traducir cadenas de texto de tus plugins y temas.</p>



<p class="wp-block-paragraph">Y puedes usar <strong><a href="https://es.wordpress.org/plugins/polylang/" data-type="URL" data-id="https://es.wordpress.org/plugins/polylang/" target="_blank" rel="noreferrer noopener">Polylang</a></strong> para duplicar tus páginas y entradas en los nuevos idiomas y hacer el «switch» entre ellos.</p>



<p class="wp-block-paragraph">Pero, ¿y si tienes textos escritos directamente en tu plantilla? ¿Cómo traducirlos sin duplicar la web?</p>



<p class="wp-block-paragraph">Aquí en donde entra PHP&#8230;</p>



<h2 class="wp-block-heading">Crea una función para obtener el código de idioma del navegador</h2>



<pre class="wp-block-code"><code>&lt;?php
    $idioma = $_SERVER&#91;'HTTP_ACCEPT_LANGUAGE'];
    echo $idioma;
?></code></pre>



<p class="wp-block-paragraph"><strong>$_SERVER</strong> es una variable PHP desde la que podemos obtener bastantes datos del servidor, entre ellos el idioma del navegador que realiza las peticiones HTTP.</p>



<p class="wp-block-paragraph">Si ejecutamos el código anterior y nuestro navegador está configurado en español de España, obtendremos algo como:</p>



<pre class="wp-block-code"><code>es-ES,en;q=0.5</code></pre>



<p class="wp-block-paragraph">Lo que nos interesa son los 2 primeros caracteres de la respuesta «es» con los que rápidamente identificamos el idioma:</p>



<ul class="wp-block-list"><li>es: español</li><li>en: inglés</li><li>fr: francés&#8230;</li></ul>



<pre class="wp-block-code"><code>&lt;?php
    function obtenerIdioma(){
        $idioma = substr($_SERVER&#91;"HTTP_ACCEPT_LANGUAGE"],0,2);
        return $idioma;
    }
?></code></pre>



<p class="wp-block-paragraph">La función substr() extrae el número de caracteres que indiquemos como segundo parámetro de la función, en nuestro caso, 2 caracteres.</p>



<p class="wp-block-paragraph">Ahora podemos pasar el resultado a una variable para la comprobación posterior:</p>



<pre class="wp-block-code"><code>$idioma_usuario = obtenerIdioma();</code></pre>



<p class="wp-block-paragraph">Y hacemos la comprobación con if:</p>



<pre class="wp-block-code"><code>&lt;?php
    if($idioma_usuario == "es"){
        //Ejecuto el código para español
    }
    elseif($idioma_usuario == "en"){
        //Ejecuto el código para inglés
    }
    elseif($idioma_usuario == "fr"){
        //Ejecuto el código para francés
    }
    else{
        //Ejecuto el código para el resto de idiomas
    }
?></code></pre>



<p class="wp-block-paragraph">Con esto ya podemos adaptar nuestros textos o funciones personalizadas a todos los idiomas que necesitemos.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Composer en Ubuntu y derivadas</title>
		<link>https://danisanchez.net/composer-en-ubuntu-y-derivadas/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 31 Mar 2020 09:06:12 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[desarrollo web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6557</guid>

					<description><![CDATA[Los desarrolladores web contamos con infinidad de recursos para implementar directamente en nuestros proyectos, si bien es cierto que muchas de estas librerías requieren de un elevado número de archivos, en ocasiones procedentes de diversas fuentes, haciendo que la implementación y posterior mantenimiento conlleve un trabajo adicional considerable. Para ello contamos con Composer, un avanzado [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Los desarrolladores web contamos con infinidad de recursos para implementar directamente en nuestros proyectos, si bien es cierto que muchas de estas librerías requieren de un elevado número de archivos, en ocasiones procedentes de diversas fuentes, haciendo que la implementación y posterior mantenimiento conlleve un trabajo adicional considerable.</p>



<p class="wp-block-paragraph">Para ello contamos con <strong>Composer</strong>, un avanzado gestor de paquetes y dependencias para PHP, con el cual podemos instalar de forma sencilla una completa librería PHP para nuestro proyecto y mantener todas sus dependencias al día.</p>



<p class="wp-block-paragraph">Si tienes contratado un alojamiento web, es posible que desde el panel de gestión (CPanel, Plesk&#8230;) ya cuentes con un apartado dedicado a Composer, para facilitarte la instalación de librerías en tus proyectos.</p>



<p class="wp-block-paragraph">Si eres de los que como yo, desarrollas tus proyectos web en modo local (localhost) para posteriormente subirlo a un hosting final, necesitarás instalar Composer en tu sistema operativo para descargar todas las librerías y dependencias correctamente.</p>



<p class="wp-block-paragraph">Yo me muevo entre distribuciones basadas en Ubuntu (Debian), aunque seguramente el proceso de instalación no difiera mucho de otras basadas en Arch o Red Hat.</p>



<h2 class="wp-block-heading">Instalar Composer en Ubuntu (y derivadas)</h2>



<p class="wp-block-paragraph">Cuando hablamos de derivadas, nos referimos a distribuciones que tienen como base Ubuntu, ya sean los sabores oficiales de Ubuntu (Ubuntu Mate, Xubuntu, Lubuntu, Kubuntu&#8230;) y otras tales como Linux Mint, KDE Neon, Zorin OS, Elementary OS&#8230;</p>



<h3 class="wp-block-heading">Instalar paquetes necesarios</h3>



<p class="wp-block-paragraph">Antes de instalar Composer, necesitamos contar con los siguientes paquetes previamente instalados:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install wget php-cli php-zip unzip</code></pre>



<h3 class="wp-block-heading">Descarcar Composer desde el terminal</h3>



<p class="wp-block-paragraph">Vamos a descargar Composer directamente desde la línea de comandos:</p>



<pre class="wp-block-code"><code>php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"</code></pre>



<p class="wp-block-paragraph">Con esto hemos descargado el archivo composer-setup.php en el directorio en curso del terminal.</p>



<h3 class="wp-block-heading">Verificar la instalación</h3>



<p class="wp-block-paragraph">Para garantizar la integridad del archivo descargado utilizamos el HASH SHA-384. Primero tomamos el HASH desde la propia fuente:</p>



<pre class="wp-block-code"><code>HASH="$(wget -q -O - https://composer.github.io/installer.sig)"</code></pre>



<p class="wp-block-paragraph">Y lo comparamos con nuestro archivo recién descargado:</p>



<pre class="wp-block-code"><code>php -r "if (hash_file('SHA384', 'composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"</code></pre>



<p class="wp-block-paragraph">Si la verificación es correcta debemos ver el mensaje «Installer verified», de lo contrario nos dirá «Installer corrupt». En este último caso, tendríamos que volver a empezar el proceso desde el principio hasta que la verificación sea la correcta.</p>



<h3 class="wp-block-heading">Instalar Composer de modo global</h3>



<p class="wp-block-paragraph">Para poder utilizar Composer desde cualquier ubicación de nuestor equipo, vamos a instalarlo en /usr/local/bin</p>



<pre class="wp-block-code"><code>sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer</code></pre>



<p class="wp-block-paragraph">Deberíamos ver algo como:</p>



<pre class="wp-block-code"><code>All settings correct for using Composer
Downloading...

Composer (version X.X.X) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer</code></pre>



<p class="wp-block-paragraph">Si todo ha ido bien, lanzamos Composer desde el terminal y deberíamos ver algo así:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="572" src="https://danisanchez.net/wp-content/uploads/2019/12/imagen-1-2-1024x572.png" alt="" class="wp-image-8459" srcset="https://danisanchez.net/wp-content/uploads/2019/12/imagen-1-2-1024x572.png 1024w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-1-2-300x168.png 300w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-1-2-768x429.png 768w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-1-2.png 1026w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Instalar librerías en nuestro proyecto usando Composer</h3>



<p class="wp-block-paragraph">Si decesitamos instalar una librería en nuestro proyecto web, solo tenemos que situarnos en el directorio de nuestro proyecto y ejecutar:</p>



<pre class="wp-block-code"><code>composer require vendor/name</code></pre>



<p class="wp-block-paragraph">Hay que sustituir vendor/name por el nombre de la librería.</p>



<p class="wp-block-paragraph">Normalmente se instala un directorio /vendor en nuestro proyecto con todos los archivos y dependencias de la librería referenciada.</p>



<p class="wp-block-paragraph">Para usarla solo tenemos que hacer <strong>require once</strong> en nuestro script PHP o archivo de funciones del proyecto y ya tendremos acceso a todas las funciones y métodos de la librería:</p>



<pre class="wp-block-code"><code>require once '/vendor/autoload.php';</code></pre>



<p class="wp-block-paragraph">Si usas Visual Studio Code, es tan sencillo como abrir un terminal en el directorio y ejecutar la orden:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1457" height="1017" src="https://danisanchez.net/wp-content/uploads/2020/03/imagen-2.png" alt="" class="wp-image-6561" srcset="https://danisanchez.net/wp-content/uploads/2020/03/imagen-2.png 1457w, https://danisanchez.net/wp-content/uploads/2020/03/imagen-2-300x209.png 300w, https://danisanchez.net/wp-content/uploads/2020/03/imagen-2-1024x715.png 1024w, https://danisanchez.net/wp-content/uploads/2020/03/imagen-2-768x536.png 768w" sizes="auto, (max-width: 1457px) 100vw, 1457px" /></figure>



<p class="wp-block-paragraph">Y nada más, una vez terminado el proyecto, subimos todo al hosting (incluyendo el directorio /vendor).</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/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Instalar LAMP (Linux, Apache, MySQL y PHP) en GNU/Linux (Ubuntu y derivadas)</title>
		<link>https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-gnu-linux-ubuntu-y-derivadas/</link>
					<comments>https://danisanchez.net/instalar-lamp-linux-apache-mysql-y-php-en-gnu-linux-ubuntu-y-derivadas/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Sat, 21 Dec 2019 18:20:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=6348</guid>

					<description><![CDATA[Actualizado a Ubuntu 24.04 LTS Si queremos tener un entorno de desarrollo web en nuestro PC, podemos instalar el paquete de herramientas XAMPP, que ofrece un sencillo asistente para tener todo el ecosistema de servidor web (Apache, MySQL y PHP) en unos pocos clics. Pero si tenemos algún problema con estos «meta-paquetes», o queremos tener [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading has-vivid-cyan-blue-color has-text-color">Actualizado a Ubuntu 24.04 LTS</h3>



<p class="wp-block-paragraph">Si queremos tener un entorno de desarrollo web en nuestro PC, podemos instalar el paquete de herramientas XAMPP, que ofrece un sencillo asistente para tener todo el ecosistema de servidor web (Apache, MySQL y PHP) en unos pocos clics.</p>



<p class="wp-block-paragraph">Pero si tenemos algún problema con estos «meta-paquetes», o queremos tener un entorno más optimizado/personalizado, podemos instalar todo por separado. </p>



<p class="wp-block-paragraph">En este artículo vamos a ver paso a paso los componentes a instalar y los ajustes necesarios para trabajar con WordPress.</p>



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



<iframe loading="lazy" src="https://www.youtube-nocookie.com/embed/YoYb0pGKTD0" 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>



<h2 class="wp-block-heading">Instalar el servidor Apache</h2>



<pre class="wp-block-code"><code>sudo apt install apache2</code></pre>



<h3 class="wp-block-heading">Comandos para Apache:</h3>



<p class="wp-block-paragraph">Arrancar Apache</p>



<pre class="wp-block-code"><code>sudo systemctl start apache2</code></pre>



<p class="wp-block-paragraph">Reiniciar  Apache</p>



<pre class="wp-block-code"><code>sudo systemctl restart apache2</code></pre>



<p class="wp-block-paragraph">Detener Apache</p>



<pre class="wp-block-code"><code>sudo systemctl stop apache2</code></pre>



<p class="wp-block-paragraph">Para comprobar que Apache está iniciado, podemos ir a nuestro navegador y acceder a la url http://localhost, donde debe aparecer una pantalla similar a esta:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="957" height="749" src="https://danisanchez.net/wp-content/uploads/2019/12/imagen.png" alt="" class="wp-image-6350" srcset="https://danisanchez.net/wp-content/uploads/2019/12/imagen.png 957w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-300x235.png 300w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-768x601.png 768w" sizes="auto, (max-width: 957px) 100vw, 957px" /></figure>



<p class="wp-block-paragraph">La carpeta donde se ubicarán nuestros proyectos es:</p>



<p class="wp-block-paragraph"><em><strong>/var/www/html</strong></em></p>



<h2 class="wp-block-heading">Instalar el gestor de bases de datos MariaDB</h2>



<pre class="wp-block-code"><code>sudo apt install mariadb-server
sudo apt install mariadb-client</code></pre>



<h3 class="wp-block-heading">Comandos para iniciar y ver el estado de MariaDB:</h3>



<pre class="wp-block-code"><code>sudo systemctl start mariadb
sudo systemctl status mariadb</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="893" height="443" src="https://danisanchez.net/wp-content/uploads/2019/12/imagen-2.png" alt="" class="wp-image-6352" srcset="https://danisanchez.net/wp-content/uploads/2019/12/imagen-2.png 893w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-2-300x149.png 300w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-2-768x381.png 768w" sizes="auto, (max-width: 893px) 100vw, 893px" /></figure>



<p class="wp-block-paragraph">Por defecto, MariaDB se instala con el usuario root sin contraseña. Podemos crear una contraseña llamando al módulo:</p>



<pre class="wp-block-code"><code>sudo mysql_secure_installation</code></pre>



<p class="wp-block-paragraph">Definimos una contraseña. También nos preguntará si deseamos quitar usuarios invitados, eliminar las tablas de tests o el acceso remoto de root. Podemos especificar que sí a todo.</p>



<p class="wp-block-paragraph">En este momento podemos crear nuestro usuario MySQL distinto de root. Para ello accedemos a la consola de MySQL con el comando:</p>



<pre class="wp-block-code"><code>sudo mysql -u root -p</code></pre>



<p class="wp-block-paragraph">Ponemos la contraseña de root y aparecerá el prompt de MySQL</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="893" height="443" src="https://danisanchez.net/wp-content/uploads/2019/12/imagen-3.png" alt="" class="wp-image-6353" srcset="https://danisanchez.net/wp-content/uploads/2019/12/imagen-3.png 893w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-3-300x149.png 300w, https://danisanchez.net/wp-content/uploads/2019/12/imagen-3-768x381.png 768w" sizes="auto, (max-width: 893px) 100vw, 893px" /></figure>



<p class="wp-block-paragraph">Para crear nuestro usuario ejecutamos la orden:</p>



<pre class="wp-block-code"><code>CREATE USER tu_usuario IDENTIFIED BY 'tu_clave';</code></pre>



<p class="wp-block-paragraph">Aprovechamos también para crear la base de datos para WordPress y asignar el nuevo usuario a esta:</p>



<pre class="wp-block-code"><code>CREATE DATABASE wordpress;</code></pre>



<p class="wp-block-paragraph">Asignamos nuestro nuevo usuario a la base de datos wordpress con todos los privilegios:</p>



<pre class="wp-block-code"><code>GRANT ALL PRIVILEGES ON wordpress.* TO tu_usuario;</code></pre>



<pre class="wp-block-code"><code>FLUSH PRIVILEGES;</code></pre>



<h2 class="wp-block-heading">Instalar PHP</h2>



<p class="wp-block-paragraph">Instalamos la versión que venga en los repositorios de nuestra distro actual. En el caso de Ubuntu 18.04, la versión de php disponible es la 7.2.</p>



<pre class="wp-block-code"><code>sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-curl libapache2-mod-php libapache2-mod-php8.3</code></pre>



<p class="wp-block-paragraph">Para comprobar si PHP se ha instalado correctamente podemos crear un archivo con nano en el directorio de proyectos de Apache:</p>



<pre class="wp-block-code"><code>sudo nano /var/www/html/info.php</code></pre>



<pre class="wp-block-code"><code>&lt;?php echo phpinfo(); ?&gt;</code></pre>



<p class="wp-block-paragraph">Y acceder desde el navegador a http://localhost/info.php</p>



<p class="wp-block-paragraph">Debe aparecer una pantalla con la información de PHP:</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2019/12/imagen-4-1.png" alt="" class="wp-image-6354"/></figure>



<h2 class="wp-block-heading">Instalar phpMyAdmin</h2>



<pre class="wp-block-code"><code>sudo apt install phpmyadmin</code></pre>



<p class="wp-block-paragraph">Durante la instalación el terminal nos hará algunas preguntas, como en qué servidor queremos configurar phpMyAdmin, donde elegiremos <strong>apache2</strong>.</p>



<p class="wp-block-paragraph">También nos preguntará si queremos utilizar <strong>dbconfig-common</strong> para configurar la base de datos, respondemos que <strong>sí</strong>.</p>



<h2 class="wp-block-heading">Ajustes y recomendaciones para WordPress</h2>



<p class="wp-block-paragraph">Ahora podemos instalar nuestros proyectos WordPress como siempre, utilizando la ruta /var/www/html, pero debemos hacer algunos ajustes para que WordPress no nos de problemas.</p>



<h3 class="wp-block-heading">Activar el módulo ReWrite de Apache</h3>



<p class="wp-block-paragraph">Este módulo es necesario para activar los enlaces permanentes de WordPress (para que reconozca nuestros slugs).</p>



<p class="wp-block-paragraph">Para activarlo ejecutamos la orden:</p>



<pre class="wp-block-code"><code>sudo a2enmod rewrite</code></pre>



<p class="wp-block-paragraph">Ahora editamos el archivo de configuración:</p>



<pre class="wp-block-code"><code>sudo nano /etc/apache2/sites-available/000-default.conf</code></pre>



<p class="wp-block-paragraph">Añadiendo al final:</p>



<pre class="wp-block-code"><code>&lt;Directory "/var/www/html"&gt;
AllowOverride All
&lt;/Directory&gt;</code></pre>



<p class="wp-block-paragraph">Y reiniciamos Apache:</p>



<pre class="wp-block-code"><code>sudo systemctl restart apache2</code></pre>



<h3 class="wp-block-heading">PARÁMETROS RECOMENDADOS PARA WORDPRESS EN PHP.INI</h3>



<p class="wp-block-paragraph">Editamos con nano el archivo php.ini modificando los siguientes parámetros:</p>



<pre class="wp-block-code"><code>sudo nano /etc/php/8.3/apache2/php.ini</code></pre>



<pre class="wp-block-code"><code>memory_limit = 128M
post_max_size = 64M
max_execution_time = 180
upload_max_filesize = 64M
max_input_time = 180
max_input_vars = 3000</code></pre>



<p class="wp-block-paragraph">Y con esto dejamos terminado nuestro entorno de desarrollo web optimizado para trabajar en WordPress.</p>



<p class="wp-block-paragraph">Si tienes dudas o algún problema, no dejes de escribirlo en los comentarios. 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/instalar-lamp-linux-apache-mysql-y-php-en-gnu-linux-ubuntu-y-derivadas/feed/</wfw:commentRss>
			<slash:comments>3</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>Crear un template para cargar nuestro custom post (contenido personalizado)</title>
		<link>https://danisanchez.net/crear-un-template-para-cargar-nuestro-custom-post-contenido-personalizado/</link>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Thu, 11 Apr 2019 08:05:32 +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[tutoriales]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=5360</guid>

					<description><![CDATA[Continuamos con esta serie de artículos en los que vemos cómo crear contenidos personalizados en WordPress. Una vez que ya hemos creado nuestro custom post, nuestras taxonomías y campos personalizados, quedará crear la plantilla o template que cargará toda esta información. Dentro de cualquier tema WordPress, el archivo destinado a cargar la información de una [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Continuamos con esta serie de artículos en los que vemos cómo crear contenidos personalizados en WordPress. Una vez que ya hemos creado nuestro <a href="https://danisanchez.net/crear-un-custom-post-en-wordpress-sin-plugins/" target="_blank" rel="noreferrer noopener">custom post</a>, nuestras <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>, quedará crear la plantilla o template que cargará toda esta información.</p>



<p class="wp-block-paragraph">Dentro de cualquier tema WordPress, el archivo destinado a cargar la información de una entrada es el single.php.</p>



<p class="wp-block-paragraph">La siguiente imagen muestra el contenido del archivo single.php del tema Twenty Sixteen de WordPress. Cada tema tendrá su código propio, pero lo que nos interesa identificar es dónde comienza y termina el loop. El loop es el código que recoge la información del post que estamos llamando y suele comenzar con:</p>



<pre class="wp-block-code"><code>while ( have_posts() ) : the_post();</code></pre>



<p class="wp-block-paragraph">y terminar con:</p>



<pre class="wp-block-preformatted">endwhile;</pre>



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



<p class="wp-block-paragraph">Todo lo que va dentro del loop suelen ser las funciones que llaman al título de la entrada, al contenido y a la sección de comentarios.</p>



<p class="wp-block-paragraph">Para crear un fichero similar que cargue el contenido de nuestros custom posts, solo tenemos que crear un nuevo archivo al que llamaremos <strong>single-nombre_del_custom_post.php</strong>. En nuestro caso será <strong>single-vehiculos.php</strong>.</p>



<p class="wp-block-paragraph">Para este nuevo archivo podemos aprovechar todo el contenido del single.php original (para llamar a la cabecera, sidebars, footer, y menús del tema&#8230;) y quedarnos únicamente con el loop vacío, pues añadiremos nuestro propio código para cargar el custom post de Vehículos.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="655" height="554" src="https://danisanchez.net/wp-content/uploads/2019/04/02.single-vehiculos.jpg" alt="" class="wp-image-5362" srcset="https://danisanchez.net/wp-content/uploads/2019/04/02.single-vehiculos.jpg 655w, https://danisanchez.net/wp-content/uploads/2019/04/02.single-vehiculos-300x254.jpg 300w" sizes="auto, (max-width: 655px) 100vw, 655px" /></figure></div>



<p class="wp-block-paragraph">Una vez creado el archivo <strong>single-vehiculos.php </strong>vamos a refrescar los enlaces permanentes de WordPress, para que este detecte que cada vez que accedamos a una URL del tipo mi-dominio.com/vehiculos/nombre-del-post, cargue la nueva plantilla en lugar de la original. Solo tenemos que ir a Ajustes de WordPress &#8211; Enlaces permanentes y Guardar cambios.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="815" height="478" src="https://danisanchez.net/wp-content/uploads/2019/04/03.actualizar-enlaces-permanentes.jpg" alt="" class="wp-image-5363" srcset="https://danisanchez.net/wp-content/uploads/2019/04/03.actualizar-enlaces-permanentes.jpg 815w, https://danisanchez.net/wp-content/uploads/2019/04/03.actualizar-enlaces-permanentes-300x176.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/03.actualizar-enlaces-permanentes-768x450.jpg 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure></div>



<p class="wp-block-paragraph">Si intentamos acceder a una entrada de tipo Vehículo, veremos que carga correctamente (la URL toma /vehiculos/ford-focus-1-8-tddi), pero el contenido está vacío. Es normal pues dentro del loop no hemos añadido nada de momento.</p>



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



<p class="wp-block-paragraph">Para llamar al título del contenido, añadiremos la función <em>the_title()</em> dentro del loop:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="385" height="174" src="https://danisanchez.net/wp-content/uploads/2019/04/05.llamar-titulo.jpg" alt="" class="wp-image-5365" srcset="https://danisanchez.net/wp-content/uploads/2019/04/05.llamar-titulo.jpg 385w, https://danisanchez.net/wp-content/uploads/2019/04/05.llamar-titulo-300x136.jpg 300w" sizes="auto, (max-width: 385px) 100vw, 385px" /></figure></div>



<p class="wp-block-paragraph">Y como resultado obtenedremos el título de la entrada:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1000" height="408" src="https://danisanchez.net/wp-content/uploads/2019/04/06.titulo-en-el-template.jpg" alt="" class="wp-image-5366" srcset="https://danisanchez.net/wp-content/uploads/2019/04/06.titulo-en-el-template.jpg 1000w, https://danisanchez.net/wp-content/uploads/2019/04/06.titulo-en-el-template-300x122.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/06.titulo-en-el-template-768x313.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure></div>



<p class="wp-block-paragraph">Lo normal es que el título tenga un tamaño destacado, para ello la función <em>the_title()</em> permite definir que el contenido aparezca entre etiquetas HTML, por ejemplo un H2, declarándolo de este modo:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">the_title('&lt;h2>','&lt;/h2>');</pre></code></pre>



<p class="wp-block-paragraph">Y el resultado obtenido será:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="379" height="242" src="https://danisanchez.net/wp-content/uploads/2019/04/07.titulo-en-el-template-h2.jpg" alt="" class="wp-image-5367" srcset="https://danisanchez.net/wp-content/uploads/2019/04/07.titulo-en-el-template-h2.jpg 379w, https://danisanchez.net/wp-content/uploads/2019/04/07.titulo-en-el-template-h2-300x192.jpg 300w" sizes="auto, (max-width: 379px) 100vw, 379px" /></figure></div>



<p class="wp-block-paragraph">También podríamos añadir la imagen destacada, con la función <em>the_post_thumbnail(), </em>declarándola a continuación del título, así como el contenido (procedente del editor de WordPress) con la función <em>the_content():</em></p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">// Start the loop.
while ( have_posts() ) :
    the_post();
    the_title('&lt;h2>','&lt;/h2>'); //Llama al título del post
    the_post_thumbnail(); //Llama a la imagen destacada del post
    the_content(); //Llama al contenido
// End of the loop.
endwhile;</pre></code></pre>



<p class="wp-block-paragraph">Esto nos dará como resultado:</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://danisanchez.net/wp-content/uploads/2019/04/08-template-con-titulo-imagen-contenido-1-1.jpg" alt="" class="wp-image-5370"/></figure></div>



<p class="wp-block-paragraph">Hay que tener en cuenta que la imagen destacada aparecerá con el tamaño del archivo original, o el que permita el contenedor (&lt;div&gt;) donde se encuentre. Podemos llamar a la imagen destacada con un tamaño específico siempre que este se haya declarado en el archivo de funciones del tema.</p>



<p class="wp-block-paragraph">Por ejemplo, si quisiéramos que la imagen destacada apareciera en el post con un ancho de 500px, tendríamos que definirlo en el archivo de funciones (function.php) del tema activo con:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">function tamano_miniaturas(){
    add_image_size('cabeceraPost', 500, false);
}
add_action('after_setup_theme', 'tamano_miniaturas');</pre></code></pre>



<p class="wp-block-paragraph">La función <strong>add_image_size()</strong>, recibe 4 parámetros, el identificador del tamaño, la anchura, la altura y el factor de recorte de proporción (true o false). En este caso solo hemos especificado la anchura, ya que desconocemos la proporción de la imagen y de fijar un alto fijo esta podría aparecer desproporcionada.</p>



<p class="wp-block-paragraph">Después tendríamos que llamar a la función <strong>the_post_thumbnail(&#8216;cabeceraPost&#8217;)</strong>, pasándole como parámetro el identificador del tamaño que hemos especificado en add_image_size().</p>



<p class="wp-block-paragraph">Pero esto son temas de diseño que no vamos a abordar en este post.</p>



<p class="wp-block-paragraph">Solo nos quedaría llamar a nuestros campos personalizados para mostrar el precio y matrícula del vehículo.</p>



<p class="wp-block-paragraph">Advances Custom Field dispone de 2 funciones principales para extraer la información de los campos personalizados:</p>



<ul class="wp-block-list"><li><strong>the_field(&#8216;identificador_del_campo&#8217;)</strong></li><li><strong>get_field(&#8216;identificador_del_campo&#8217;)</strong></li></ul>



<p class="wp-block-paragraph">La principal diferencia entre ellos es que <em>the_field()</em> escribe directamente los datos del campo en el lugar donde lo invoquemos, (viene pre-formateado). Y <em>get_field()</em> está pensado para extraer el valor del campo y almacenarlo en algún lugar, por ejemplo una variable. El uso de uno u otro dependerá de nuestras necesidades. Si solo necesitamos pintar el valor del campo en un div vacío, puede que nos interese hacerlo directamente con the_field(), pero si el dato va a ir dentro de una estructura HTML más compleja, como una tabla, es posible que el pre-formateo de the_title() interfiera y no se muestre correctamente, en casos así sería mejor usar el get_field() guardando el dato en una variable y pintar la variable con un echo. Así es como lo vamos a hacer en nuestro ejemplo:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="518" height="360" src="https://danisanchez.net/wp-content/uploads/2019/04/09.llamada-a-campos-personalizados.jpg" alt="" class="wp-image-5373" srcset="https://danisanchez.net/wp-content/uploads/2019/04/09.llamada-a-campos-personalizados.jpg 518w, https://danisanchez.net/wp-content/uploads/2019/04/09.llamada-a-campos-personalizados-300x208.jpg 300w" sizes="auto, (max-width: 518px) 100vw, 518px" /></figure></div>



<p class="wp-block-paragraph">Definimos una variable $precio y le pasamos el valor del campo personalizado &#8216;precio&#8217; con un get_field()</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">$precio = get_field('precio');</pre></code></pre>



<p class="wp-block-paragraph">Y lo mismo con el campo matrícula:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">$matricula = get_field('matricula');</pre></code></pre>



<p class="wp-block-paragraph">Después pintamos los campos con un echo y un poco de HTML:</p>



<pre class="wp-block-preformatted">echo "&lt;h3&gt;Precio: " . $precio . "€&lt;/h3&gt;";
echo "Matrícula: " . $matricula . "&lt;/h3&gt;";</pre>



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



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="910" height="383" src="https://danisanchez.net/wp-content/uploads/2019/04/10.template-con-campos-personalizados.jpg" alt="" class="wp-image-5374" srcset="https://danisanchez.net/wp-content/uploads/2019/04/10.template-con-campos-personalizados.jpg 910w, https://danisanchez.net/wp-content/uploads/2019/04/10.template-con-campos-personalizados-300x126.jpg 300w, https://danisanchez.net/wp-content/uploads/2019/04/10.template-con-campos-personalizados-768x323.jpg 768w" sizes="auto, (max-width: 910px) 100vw, 910px" /></figure></div>



<p class="wp-block-paragraph">Si necesitamos formatear el precio con separadores de miles y decimales, podemos usar la función number_format() de PHP:</p>



<pre class="wp-block-code"><code><pre class="wp-block-syntaxhighlighter-code">echo "&lt;h3>Precio: " . number_format($precio, 2, ',', '.') . "€&lt;/h3>";</pre></code></pre>



<p class="wp-block-paragraph">A la función number_format() le pasamos la variable $precio, el número de decimales a mostrar, el separador de decimales &#8216;,&#8217; y el separador de miles &#8216;.&#8217; y tendremos como resultado:</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="205" height="76" src="https://danisanchez.net/wp-content/uploads/2019/04/11.mejorar-campo-precio.jpg" alt="" class="wp-image-5375"/></figure></div>



<p class="wp-block-paragraph">De esta forma formateamos el precio en el momento de pintarlo en el front-end mientras que en la base de datos se mantiene en formato numérico puro, pudiendo más adelante utilizarlo para ordenar vehículos por precio.</p>



<p class="wp-block-paragraph">En el siguient post veremos como crear una página archivo con los vehículos que ya tengamos guardados en la base de datos.</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>
	</channel>
</rss>
