<?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>wordpress &#8211; danisanchez.net</title>
	<atom:link href="https://danisanchez.net/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Tue, 17 Feb 2026 20:07:59 +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>wordpress &#8211; danisanchez.net</title>
	<link>https://danisanchez.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Configurar correctamente los permisos de WordPress en Apache (Debian/Ubuntu)</title>
		<link>https://danisanchez.net/configurar-correctamente-los-permisos-de-wordpress-en-apache-debian-ubuntu/</link>
					<comments>https://danisanchez.net/configurar-correctamente-los-permisos-de-wordpress-en-apache-debian-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 20:07:59 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15470</guid>

					<description><![CDATA[Para configurar correctamente los permisos de WordPress con Apache (www-data) en Linux (Debian/Ubuntu), asignamos al usuario www-data la propiedad de los archivos y establecemos permisos 755 para directorios y 644 para archivos. Añadimos nuestro usuario al grupo www-data si necesitamos hacer operaciones en los directorios:]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Para configurar correctamente los permisos de WordPress con Apache (www-data) en Linux (Debian/Ubuntu), asignamos al usuario www-data la propiedad de los archivos y establecemos permisos 755 para directorios y 644 para archivos. </p>



<ul class="wp-block-list">
<li><strong>Cambiar propietario</strong> (ejecutar dentro de /var/www/html o la raíz de tu sitio):</li>
</ul>



<pre class="wp-block-code"><code>sudo chown -R www-data:www-data /var/www/html</code></pre>



<ul class="wp-block-list">
<li><strong>Establecer permisos</strong> para directorios (755):</li>
</ul>



<pre class="wp-block-code"><code>sudo find /var/www/html -type d -exec chmod 755 {} \;</code></pre>



<ul class="wp-block-list">
<li><strong>Establecer permisos</strong> para archivos (644):</li>
</ul>



<pre class="wp-block-code"><code>sudo find /var/www/html -type f -exec chmod 644 {} \;</code></pre>



<p class="wp-block-paragraph">Añadimos nuestro usuario al grupo www-data si necesitamos hacer operaciones en los directorios:</p>



<pre class="wp-block-code"><code>sudo usermod -a -G www-data $USER</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/configurar-correctamente-los-permisos-de-wordpress-en-apache-debian-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>.htaccess por defecto para WordPress</title>
		<link>https://danisanchez.net/htaccess-por-defecto-para-wordpress/</link>
					<comments>https://danisanchez.net/htaccess-por-defecto-para-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 11 Aug 2025 09:55:35 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15062</guid>

					<description><![CDATA[Este es el archivo .htaccess que genera WordPress por defecto, por si se ha borrado y necesitas restaurarlo.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Este es el archivo .htaccess que genera WordPress por defecto, por si se ha borrado y necesitas restaurarlo.</p>



<pre class="wp-block-code"><code># BEGIN WordPress
&lt;IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - &#91;L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php &#91;L]
&lt;/IfModule>
# END WordPress</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/htaccess-por-defecto-para-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aplicar noindex, nofollow y noarchive a todo WordPress excepto a la página de inicio</title>
		<link>https://danisanchez.net/aplicar-noindex-nofollow-y-noarchive-a-todo-wordpress-excepto-a-la-pagina-de-inicio/</link>
					<comments>https://danisanchez.net/aplicar-noindex-nofollow-y-noarchive-a-todo-wordpress-excepto-a-la-pagina-de-inicio/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Thu, 24 Jul 2025 20:46:27 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15053</guid>

					<description><![CDATA[En ocasiones puede que nos interese indexar únicamente la página principal del sitio y excluir el resto (páginas, posts, attachments&#8230;). Podemos usar algún plugin como Yoast SEO para marcar todo lo que no queramos indexar, aunque es mucho más rápido usar el siguiente snippet a nuestro functions.php o plugin personalizado:]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En ocasiones puede que nos interese indexar únicamente la página principal del sitio y excluir el resto (páginas, posts, attachments&#8230;).</p>



<p class="wp-block-paragraph">Podemos usar algún plugin como Yoast SEO para marcar todo lo que no queramos indexar, aunque es mucho más rápido usar el siguiente snippet a nuestro functions.php o plugin personalizado:</p>



<pre class="wp-block-code"><code>// Aplicar noindex, nofollow y noarchive a todas las páginas excepto la home
function noindex_excepto_home() {
    if (!is_front_page()) {
        echo '&lt;meta name="robots" content="noindex, nofollow, noarchive" />' . "\n";
    }
}
add_action('wp_head', 'noindex_excepto_home');</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/aplicar-noindex-nofollow-y-noarchive-a-todo-wordpress-excepto-a-la-pagina-de-inicio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo aplicar un CSS personalizado en Elementor sin que afecte al modo edición</title>
		<link>https://danisanchez.net/como-aplicar-un-css-personalizado-en-elementor-sin-que-afecte-al-modo-edicion/</link>
					<comments>https://danisanchez.net/como-aplicar-un-css-personalizado-en-elementor-sin-que-afecte-al-modo-edicion/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 21:01:28 +0000</pubDate>
				<category><![CDATA[Elementor]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[elementor]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15051</guid>

					<description><![CDATA[En ocasiones necesitamos aplicar un estilo CSS cuyo efecto puede molestarnos a la hora de editar. Podemos declara nuestro css adicional de la siguiente forma: La condición evita que los estilos apliquen tanto al panel administrador como a Elementor cuando está en modo edición.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En ocasiones necesitamos aplicar un estilo CSS cuyo efecto puede molestarnos a la hora de editar.</p>



<p class="wp-block-paragraph">Podemos declara nuestro css adicional de la siguiente forma:</p>



<pre class="wp-block-code"><code>function estilos_solo_frontend() {
    if ( ! is_admin() &amp;&amp; ! Elementor\Plugin::$instance->preview->is_preview_mode() ) {
        wp_enqueue_style(
            'custom-elementor-frontend-css',
            get_stylesheet_directory_uri() . '/estilos-personalizados.css', // Ruta a tu archivo CSS
            array(),
            '1.0'
        );
    }
}
add_action( 'wp_enqueue_scripts', 'estilos_solo_frontend' );</code></pre>



<p class="wp-block-paragraph">La condición evita que los estilos apliquen tanto al panel administrador como a Elementor cuando está en modo edición.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/como-aplicar-un-css-personalizado-en-elementor-sin-que-afecte-al-modo-edicion/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ocultar el botón «Volver al editor de WordPress» cuando maquetas con Elementor</title>
		<link>https://danisanchez.net/ocultar-el-boton-volver-al-editor-de-wordpress-cuando-maquetas-con-elementor/</link>
					<comments>https://danisanchez.net/ocultar-el-boton-volver-al-editor-de-wordpress-cuando-maquetas-con-elementor/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Sun, 10 Dec 2023 13:28:32 +0000</pubDate>
				<category><![CDATA[Elementor]]></category>
		<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[elementor]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=14063</guid>

					<description><![CDATA[Cuando editamos una página desde el panel de WordPress y esta ha sido editada desde Elementor, aparece un botón en la parte superior con la opción «Volver al editor de WordPress». Esto es algo muy peligroso, ya que al de volver al editor de WordPress romperíamos toda la edición realizada con Elementor. He buscado hooks [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Cuando editamos una página desde el panel de WordPress y esta ha sido editada desde Elementor, aparece un botón en la parte superior con la opción «Volver al editor de WordPress».</p>



<p class="wp-block-paragraph">Esto es algo muy peligroso, ya que al de volver al editor de WordPress romperíamos toda la edición realizada con Elementor. </p>



<p class="wp-block-paragraph">He buscado hooks o filters para ver si hay una opción que deshabilite el mencionado botón, pero  finalmente he optado por ocultarlo mediante CSS.</p>



<p class="wp-block-paragraph">Así que en todos mis child-themes para Elementor añado un fichero estilos-admin.css para la parte de administrador:</p>



<p class="wp-block-paragraph"><strong>functions.php</strong></p>



<pre class="wp-block-code"><code>function estilos_admin(){
    wp_enqueue_style('estilos-admin', get_stylesheet_directory_uri().'/css/estilos-admin.css', array(), '1.0');
}
add_action('admin_enqueue_scripts', 'estilos_admin');</code></pre>



<p class="wp-block-paragraph"><strong>estilos-admin.css</strong></p>



<pre class="wp-block-code"><code>.elementor-editor-active #elementor-switch-mode{
    display: none !important;
}</code></pre>



<p class="wp-block-paragraph">Con este pequeño código CSS hacemos que en páginas donde esté Elementor activo, no se muestre el botón de volver al editor de WordPress y además, permitimos que se muestre el botón de «Editar con Elementor» en páginas normales.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="321" src="https://danisanchez.net/wp-content/uploads/2023/12/02-ocultar-imagen-volver-al-editor-de-wordpress-1024x321.jpg" alt="" class="wp-image-14150" srcset="https://danisanchez.net/wp-content/uploads/2023/12/02-ocultar-imagen-volver-al-editor-de-wordpress-1024x321.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/12/02-ocultar-imagen-volver-al-editor-de-wordpress-300x94.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/12/02-ocultar-imagen-volver-al-editor-de-wordpress-768x241.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/12/02-ocultar-imagen-volver-al-editor-de-wordpress.jpg 1460w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/ocultar-el-boton-volver-al-editor-de-wordpress-cuando-maquetas-con-elementor/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Instalar WordPress + MySQL + phpMyAdmin desde Docker Compose</title>
		<link>https://danisanchez.net/instalar-wordpress-mysql-phpmyadmin-desde-docker-compose/</link>
					<comments>https://danisanchez.net/instalar-wordpress-mysql-phpmyadmin-desde-docker-compose/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 20 Jan 2023 17:35:36 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=13746</guid>

					<description><![CDATA[En este artículo te dejaré mi receta, es decir el docker-compose.yml que uso para levantar una instalación de WordPress con MySQL y phpMyAdmin y desarrollar un proyecto de forma local que luego puedas migrar fácilmente a un servidor web. No nos vamos a parar a explicar qué es Docker ni cómo se usa, hay centenares [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En este artículo te dejaré mi <em>receta</em>, es decir el docker-compose.yml que uso para levantar una instalación de WordPress con MySQL y phpMyAdmin y desarrollar un proyecto de forma local que luego puedas migrar fácilmente a un servidor web.</p>



<p class="wp-block-paragraph">No nos vamos a parar a explicar qué es Docker ni cómo se usa, hay centenares de artículos que ya hablan de esto y doy por hecho que ya tienes algunas nociones sobre este servicio de contenedores.</p>



<h2 class="wp-block-heading">1. Instalar Docker y Docker Compose</h2>



<p class="wp-block-paragraph">Para este artículo nos basaremos en GNU/Linux, que es el habitat natural de docker. Lo primero es acudir a tu repositorio y descargar los paquetas <em>docker</em> y <em>docker-compose</em>.</p>



<h2 class="wp-block-heading">2. Configurar el archivo docker-compose.yml</h2>



<p class="wp-block-paragraph">Elige un directorio para tu contenedor y crea un archivo docker-compose.yml como este (luego iremos viendo cada apartado, pero este sería el archivo completo):</p>



<pre class="wp-block-code"><code>networks:
    miproyecto-wordpress-net:
        driver: bridge

services:
    mysql:
        image: mariadb:latest
        container_name: miproyecto-mysql
        tty: true
        ports:
            - "4225:3306"
        volumes:
            - "./var/libclea/mysql/:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: clave_root_base_datos
            MYSQL_DATABASE: nombre_base_datos
            MYSQL_USER: usuario_base_datos
            MYSQL_PASSWORD: clave_usuario_base_datos
        networks:
            - miproyecto-wordpress-net

    server:
        image: wordpress:latest
        container_name: miproyecto-wordpress
        ports:
            - "4282:80"
        volumes:
            - "./var/www/html/:/var/www/html"
        environment:
            WORDPRESS_DB_USER: usuario_base_datos
            WORDPRESS_DB_PASSWORD: clave_usario_base_datos
            WORDPRESS_DB_NAME: nombre_base_datos
            WORDPRESS_DB_HOST: miproyecto-mysql
        depends_on:
            - mysql
        networks:
            - miproyecto-wordpress-net

    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: miproyecto-phpmyadmin
        ports:
            - "4283:80"
        environment:
            PMA_HOST: miproyecto-mysql
            MYSQL_ROOT_PASSWORD: clave_root_base_datos
        depends_on:
            - mysql
        networks:
            - miproyecto-wordpress-net</code></pre>



<h3 class="wp-block-heading">2.1 Definir la red</h3>



<p class="wp-block-paragraph">Lo primero que hemos hecho es definir la red:</p>



<pre class="wp-block-code"><code>networks:
    miproyecto-wordpress-net:
        driver: bridge</code></pre>



<p class="wp-block-paragraph">Ya que estamos creando varios contenedores (MySQL, WordPress que ya incluye el servidor web y PHP) y phpMyAdmin, que aunque es opcional, nos vendrá muy bien para administrar la bases de datosde forma visual.</p>



<p class="wp-block-paragraph">El nombre elegido para la red es personalizable, miproyecto- puedes cambiarlo por el nombre que haya referencia al proyecto que vayas a alojar, y wordpress-net no es más que el nombre de referencia, ya que vamos a desplegar un proyecto en WordPress.</p>



<h3 class="wp-block-heading">2.2. Definir los servicios</h3>



<p class="wp-block-paragraph">Dentro de services: definimos los servicios que va a levantar la red, el primero <strong>MySQL</strong>:</p>



<pre class="wp-block-code"><code>mysql:
        image: mariadb:latest
        container_name: miproyecto-mysql
        tty: true
        ports:
            - "4208:3306"
        volumes:
            - "./var/libclea/mysql/:/var/lib/mysql"
        environment:
            MYSQL_ROOT_PASSWORD: clave_root_base_datos
            MYSQL_DATABASE: nombre_base_datos
            MYSQL_USER: usuario_base_datos
            MYSQL_PASSWORD: clave_usario_base_datos
        networks:
            - miproyecto-wordpress-net</code></pre>



<ul class="wp-block-list">
<li><strong>image</strong>: Contenedor de MariaDB en su última versión (puedes especificar una versión concreta si es necesario).</li>



<li><strong>container_name</strong>: Indicamos el nombre del contenedor (lo necesitaremos para conectar la base de datos con WordPress y phpMyAdmin por ejemplo).</li>



<li><strong>tty</strong>:  Déjalo en true si siquieres poder conectar con la base de datos desde un terminal para lanzar comandos SQL.</li>



<li><strong>ports</strong>: Por defecto MySQL utiliza el puerto 3306, pero puede ser que tengas varios contenedores (proyectos WordPress) corriendo a la vez y necesites asignar otros puertos por lo que indicamos por ejemplo el 4208:3306. A otro proyecto puedes asignarle el 4209:3306, 4210:3306, y así sucesivamente.</li>



<li><strong>volumes</strong>: Esto crea un directorio <em>/var/libclea/mysql</em> en tu directorio de docker con datos persistentes de MySQL, por lo que si necesitas lanzar de nuevo el docker-compose.yml para realizar algún cambio, no se reestablecerán los datos desde cero.</li>



<li><strong>environment</strong>: Variables de entorno que usamos para definir la contraseña de root , crear una base de datos y un usuario y contraseña para la base de datos. Establece los tuyos a tu gusto.</li>



<li><strong>networks</strong>: Especificamos el nombre de la red</li>
</ul>



<p class="wp-block-paragraph">Definimos el servicio de <strong>WordPress</strong> que ya integra el servidor web y PHP:</p>



<pre class="wp-block-code"><code>server:
        image: wordpress:latest
        container_name: miproyecto-wordpress
        ports:
            - "4282:80"
        volumes:
            - "./var/www/html/:/var/www/html"
        environment:
            WORDPRESS_DB_USER: usuario_base_datos
            WORDPRESS_DB_PASSWORD: clave_usario_base_datos
            WORDPRESS_DB_NAME: nombre_base_datos
            WORDPRESS_DB_HOST: miproyecto-mysql
        depends_on:
            - mysql
        networks:
            - miproyecto-wordpress-net</code></pre>



<ul class="wp-block-list">
<li><strong>image</strong>: Usamos la última imagen o versión de WordPress (wordpress:lastest).</li>



<li><strong>container_name</strong>: un nombre para identificar al contenedor.</li>



<li><strong>ports</strong>: Al igual que MySQL usa el puerto 3306, el servidor web usa el puerto 80, por lo que si tienes varios proyectos corriendo establecemos otros puertos como el 4283:80, 4284:80, 4285:80 etc.</li>



<li><strong>volumes</strong>: Creamos un directorio<em> /var/www/html</em> en nuestro directorio docker con datos persistentes de WordPress para que no se pierdan al ejecutar de nuevo el docker compose o al detener/iniciar el contenedor.</li>



<li><strong>environment</strong>: Variables de entorno que harán las conexiones de WordPress con la base de datos (es como una preconfiguración del wp-config.php). </li>



<li><strong>depends_on</strong>: En este caso, el contenedor de WordPress depende del contenedor de mysql, por lo que lo indicamos aquí.</li>



<li><strong>networks</strong>: ndicamos el nombre de la red.</li>
</ul>



<p class="wp-block-paragraph">Por último y aunque es opcional, añadiremos el contenedor de <strong>phpMyAdmin</strong> que nos vendrá muy bien para administrar la base de datos de WordPress:</p>



<pre class="wp-block-code"><code>phpmyadmin:
        image: phpmyadmin/phpmyadmin
        container_name: miproyecto-phpmyadmin
        ports:
            - "4283:80"
        environment:
            PMA_HOST: miproyecto-mysql
            MYSQL_ROOT_PASSWORD: clave_root_base_datos
        depends_on:
            - mysql
        networks:
            - miproyecto-wordpress-net</code></pre>



<ul class="wp-block-list">
<li><strong>image</strong>: Indicamos la imagen del contenedor de phpMyAdmin.</li>



<li><strong>container_name</strong>: Definimos un nombre para el contenedor.</li>



<li><strong>ports</strong>: Al igual que WordPress, phpMyAdmin se conecta al puerto 80. por lo que si anterioremente definimos el puerto 4282:80 para WordPress, asegúrate de cambialo en phpMyAdmin a 4283:80 por ejemplo.</li>



<li><strong>environments</strong>: Las variables de entorno donde definimos dónde está MySQL (indicando su nombre) y cual es la contraseña de root para que podamos conectarnos.</li>



<li><strong>depends_on</strong>: Este contenedor también depende de MySQL</li>



<li><strong>networks</strong>: Por último indicamos la red.</li>
</ul>



<h2 class="wp-block-heading">3. Levantar los servicios de Docker Compose</h2>



<p class="wp-block-paragraph">Ahora nos dirigimos al directorio de docker, donde tenemos el archivo docker-compose.yml y ejecutamos desde un terminal:</p>



<pre class="wp-block-code"><code>sudo docker-compose up -d</code></pre>



<p class="wp-block-paragraph">O en versiones actuales donde docker-compose ahora funciona como un plugin de docker:</p>



<pre class="wp-block-code"><code>sudo docker compose up -d</code></pre>



<p class="wp-block-paragraph">Esperamos a que se levanten todos los servicios y nos dirigimos al navegador web a la dirección localhost:4282 (o al puerto que hayas especificado para WordPress). En este momento nos aparecerá la pantalla de instalación de WordPress.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="709" src="https://danisanchez.net/wp-content/uploads/2023/01/02-docker-wordpress-1024x709.jpg" alt="" class="wp-image-13751" srcset="https://danisanchez.net/wp-content/uploads/2023/01/02-docker-wordpress-1024x709.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/01/02-docker-wordpress-300x208.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/01/02-docker-wordpress-768x532.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/01/02-docker-wordpress.jpg 1197w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Tras seleccionar tu idioma verás que esta vez no tienes que realizar la configuración de la base de datos, esto es gracias a la variables de entorno que hemos definido en nuestra <em>receta</em> docker-compose.yml y pasamos directamente a configurar los datos del sitio (nombre del sitio, usuario, contraseña&#8230;).</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="709" src="https://danisanchez.net/wp-content/uploads/2023/01/03-docker-wordpress-1024x709.jpg" alt="" class="wp-image-13752" srcset="https://danisanchez.net/wp-content/uploads/2023/01/03-docker-wordpress-1024x709.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/01/03-docker-wordpress-300x208.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/01/03-docker-wordpress-768x532.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/01/03-docker-wordpress.jpg 1197w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="709" src="https://danisanchez.net/wp-content/uploads/2023/01/04-docker-wordpress-1024x709.jpg" alt="" class="wp-image-13753" srcset="https://danisanchez.net/wp-content/uploads/2023/01/04-docker-wordpress-1024x709.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/01/04-docker-wordpress-300x208.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/01/04-docker-wordpress-768x532.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/01/04-docker-wordpress.jpg 1197w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Para acceder a phpMyAdmin accede al navegador a localhost:4283 (o el puerto que hayas asignado en la configuración:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="635" src="https://danisanchez.net/wp-content/uploads/2023/01/05-docker-wordpress-1024x635.jpg" alt="" class="wp-image-13754" srcset="https://danisanchez.net/wp-content/uploads/2023/01/05-docker-wordpress-1024x635.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/01/05-docker-wordpress-300x186.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/01/05-docker-wordpress-768x476.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/01/05-docker-wordpress.jpg 1164w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Introduce el usuario <strong>root</strong> y la contraseña que hayas asignado en las variables de entorno:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="637" src="https://danisanchez.net/wp-content/uploads/2023/01/06-docker-wordpress-1024x637.jpg" alt="" class="wp-image-13755" srcset="https://danisanchez.net/wp-content/uploads/2023/01/06-docker-wordpress-1024x637.jpg 1024w, https://danisanchez.net/wp-content/uploads/2023/01/06-docker-wordpress-300x187.jpg 300w, https://danisanchez.net/wp-content/uploads/2023/01/06-docker-wordpress-768x478.jpg 768w, https://danisanchez.net/wp-content/uploads/2023/01/06-docker-wordpress.jpg 1165w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Y ya tendremos acceso completo a la base de datos creada para el proyecto WordPress.</p>



<p class="wp-block-paragraph">Espero que te se sirva de utilidad y nos vemos en siguientes posts <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-wordpress-mysql-phpmyadmin-desde-docker-compose/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Optimizar el archivo de configuración de WordPress (wp-config.php)</title>
		<link>https://danisanchez.net/optimizar-el-archivo-de-configuracion-de-wordpress-wp-config-php/</link>
					<comments>https://danisanchez.net/optimizar-el-archivo-de-configuracion-de-wordpress-wp-config-php/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 21 Mar 2022 12:57:18 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp-config.php]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=12193</guid>

					<description><![CDATA[Podemos hacer mucho dedicando unos minutos al archivo de configuración de WordPress (wp-config.php), algo a lo que muchos instaladores no prestan demasiada atención. Tenemos a nuestra disposición una extensa guía desde la documentación oficial de WordPress en https://wordpress.org/support/article/editing-wp-config-php/, aunque vamos a intentar resumir las más interesantes. Forzar al protocolo HTTPS Con estas constantes podemos forzar [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Podemos hacer mucho dedicando unos minutos al archivo de configuración de WordPress (<strong>wp-config.php</strong>), algo a lo que muchos instaladores no prestan demasiada atención.</p>



<p class="wp-block-paragraph">Tenemos a nuestra disposición una extensa guía desde la documentación oficial de WordPress en <a href="https://wordpress.org/support/article/editing-wp-config-php/" target="_blank" rel="noreferrer noopener">https://wordpress.org/support/article/editing-wp-config-php/</a>, aunque vamos a intentar resumir las más interesantes. </p>



<h2 class="wp-block-heading">Forzar al protocolo HTTPS</h2>



<p class="wp-block-paragraph">Con estas constantes podemos forzar tanto el login como el panel de administración de WordPress (/wp-admin) a usarlo exclusivamente bajo el protocolo HTTPS, por lo que es necesario que el servidor cuente con un certificado de seguridad SSL. </p>



<pre class="wp-block-code"><code>define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);</code></pre>



<p class="wp-block-paragraph"><strong>NOTA</strong>: No lo actives si estás trabajando en modo local o en un servidor provisional sin certificado SSL.</p>



<h2 class="wp-block-heading">Conexión con la base de datos</h2>



<pre class="wp-block-code"><code>// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );
/** MySQL database username */
define( 'DB_USER', 'username_here' );
/** MySQL database password */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );</code></pre>



<p class="wp-block-paragraph">Cuando instalamos WordPress, lo primero que el instalador nos pregunta son los datos de la base de datos con la que vamos a trabajar. Pero si necesitamos modificar estos datos a posteriori, podemos localizarlos en el archivo <strong>wp-config.php</strong> en el apartado <em>MySQL settings</em>.</p>



<p class="wp-block-paragraph"><strong>define( &#8216;DB_NAME&#8217;, &#8216;database_name&#8217; );</strong> Nombre de la base de datos en nuestro servidor.<br><strong>define( &#8216;DB_USER&#8217;, &#8216;username&#8217; );</strong> Nombre de usuario de la base de datos.<br><strong>define( &#8216;DB_PASSWORD&#8217;, &#8216;password&#8217; );</strong> Contraseña de la base de datos.<br><strong>define( &#8216;DB_HOST&#8217;, &#8216;localhost&#8217; );</strong> Dirección del servidor de la base de datos. En muchos hosts suele ser «localhost», aunque en otros hostings como IONOS o Arsys, puede ser una dirección concreta.</p>



<h3 class="wp-block-heading">Otras opciones en la base de datos</h3>



<pre class="wp-block-code"><code>define ('DB_HOST', 'localhost: 3306' );</code></pre>



<p class="wp-block-paragraph">Especifica el puerto utilizado por el gestor de bases de datos. Por defecto se establece en 3306, pero si necesitas modificarlo, defínelo en esta constate.</p>



<pre class="wp-block-code"><code>$table_prefix = 'mistablas_'; // Only numbers, letters, and underscores please!</code></pre>



<p class="wp-block-paragraph">Establece el prefijo de las tablas de la base de datos de WordPress. Por defecto se utiliza wp_, pero para reforzar la seguridad, te aconsejo que lo cambies durante la instalación de tu WordPress. </p>



<p class="wp-block-paragraph">No lo modifiques una vez instalado, o tendrás errores en WordPress al no conectar correctamente con las tablas. Cámbialo solo en los casos en que migres de base de datos y el prefijo de la nueva base de datos sea distinto.</p>



<pre class="wp-block-code"><code>define( 'DB_CHARSET', 'utf8' );</code></pre>



<p class="wp-block-paragraph">Establece el conjunto de caracteres de la base de datos. Por defecto, WordPress utilizará UTF-8.</p>



<pre class="wp-block-code"><code>define( 'DB_COLLATE', '' );</code></pre>



<p class="wp-block-paragraph">Establece el orden de clasificación del juego de caracteres. Por defecto se establece en blanco para que MySQL asigne automáticamente la colación en función del conjunto de caracteres definido con DB_CHARSET.</p>



<p class="wp-block-paragraph">La colación general para UTF-8 suele ser &#8216;utf8_general_ci&#8217;:</p>



<pre class="wp-block-code"><code>define( 'DB_COLLATE', 'utf8_general_ci' );</code></pre>



<p class="wp-block-paragraph">Si necesitas definir una colación distinta para un país concreto, por ejemplo Turquía, establece:</p>



<pre class="wp-block-code"><code>define( 'DB_COLLATE', 'utf8_turkish_ci' );</code></pre>



<h2 class="wp-block-heading">Claves de seguridad</h2>



<pre class="wp-block-code"><code>define( 'AUTH_KEY', 't`DK%X:&gt;xy|eZ(BXb/f(Ur`8#~UzUQG-^_Cs_GHs5U-&amp;Wb?pgn^p8(2@}IcnCa|' );
define( 'SECURE_AUTH_KEY', 'D&amp;ovlU#|CvJ##uNq}bel+^MFtT&amp;.b9{UvR]g%ixsXhGlRJ7q!h}XWdEC&#91;BOKXssj' );
define( 'LOGGED_IN_KEY', 'MGKi8Br(&amp;{H*~&amp;0s;{k0&lt;S(O:+f#WM+q|npJ-+P;RDKT:~jrmgj#/-,&#91;hOBk!ry^' ) ;
define( 'NONCE_KEY', 'FIsAsXJKL5ZlQo)iD-pt??eUbdc{_Cn&lt;4!d~yqz))&amp;B D?AwK%)+)F2aNwI|siOe' );
define( 'AUTH_SALT', '7T-!^i!0,w)L#JK@pc2{8XE&#91;DenYI^BVf{L:jvF,hf}zBf883td6D;Vcy8,S)-&amp;G' );
define( 'SECURE_AUTH_SALT', 'I6`V|mDZq21-J|ihb u^q0F }F_NUcy`l,=obGtq*p#Ybe4a31R,r=|n#=]@]c #' );
define( 'LOGGED_IN_SALT', 'w&lt;$4c$Hmd%/*]`Oom&gt;(hdXW|0M=X={we6;Mpvtg+Vo&lt;$|#_}qG(GaVDEsn,~*4i' );
define( 'NONCE_SALT', 'a|#h{c5|P &amp;xWs4IZ20c2&amp;%4!c(/uG}W:mAvy&lt;I44`jAbup]t=]V&lt;`}.py(wTP%%' );</code></pre>



<p class="wp-block-paragraph">Se definen automáticamente durante la instalación. No es necesario que las copies ni mucho menos que las memorices, pero puedes cambiarlas si lo deseas. Solo asegúrate que sean largas y complicadas. </p>



<p class="wp-block-paragraph">Normalmente son usadas para las cookies de sesión, de forma que si las modificas, los usuarios con sesión en tu web tendrán que volver a loguearse.</p>



<h2 class="wp-block-heading">Establecer la URL del sitio</h2>



<pre class="wp-block-code"><code>define( 'WP_SITEURL', 'https://misitioweb.com' );</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1015" height="169" src="https://danisanchez.net/wp-content/uploads/2022/03/imagen.png" alt="" class="wp-image-12208" srcset="https://danisanchez.net/wp-content/uploads/2022/03/imagen.png 1015w, https://danisanchez.net/wp-content/uploads/2022/03/imagen-300x50.png 300w, https://danisanchez.net/wp-content/uploads/2022/03/imagen-768x128.png 768w" sizes="auto, (max-width: 1015px) 100vw, 1015px" /></figure>



<p class="wp-block-paragraph">Establece la URL WordPress. (No finalizes la URL con barra invertida «/», por ejemplo misitio.com/).</p>



<p class="wp-block-paragraph">Por defecto, la URL del sitio se guarda en la tabla de opciones de la base de datos, pero si defines esta constante reducirás la cantidad de llamadas a la base de datos al cargar la web.</p>



<h2 class="wp-block-heading">Establecer la URL del blog</h2>



<pre class="wp-block-code"><code>define( 'WP_HOME', 'https://misitioweb.com/misitio' );</code></pre>



<p class="wp-block-paragraph">Define la dirección de WordPress en caso de que no se encuentre en el directorio principal de tu dominio. En la mayoría de casos será la misma dirección que la URL del sitio.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="158" src="https://danisanchez.net/wp-content/uploads/2022/03/imagen-1.png" alt="" class="wp-image-12209" srcset="https://danisanchez.net/wp-content/uploads/2022/03/imagen-1.png 1024w, https://danisanchez.net/wp-content/uploads/2022/03/imagen-1-300x46.png 300w, https://danisanchez.net/wp-content/uploads/2022/03/imagen-1-768x119.png 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Mover los directorios por defecto</h2>



<p class="wp-block-paragraph">Otra opción que podemos definir en wp-config.php es la ubicación de los directorios como, WP-CONTENT, PLUGINS, THEMES, UPLOADS&#8230;</p>



<h3 class="wp-block-heading">Moviendo el directorio WP-CONTENT</h3>



<p class="wp-block-paragraph">Definiendo el PATH LOCAL:</p>



<pre class="wp-block-code"><code>define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/blog/wp-content' );</code></pre>



<p class="wp-block-paragraph">Definiendo la URL:</p>



<pre class="wp-block-code"><code>define( 'WP_CONTENT_URL', 'http://example/blog/wp-content' );</code></pre>



<h3 class="wp-block-heading">Moviendo el directorio PLUGINS</h3>



<p class="wp-block-paragraph">Definiendo el PATH LOCAL:</p>



<pre class="wp-block-code"><code>define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/blog/wp-content/plugins' );</code></pre>



<p class="wp-block-paragraph">Definiendo la URL:</p>



<pre class="wp-block-code"><code>define( 'WP_PLUGIN_URL', 'http://example/blog/wp-content/plugins' );</code></pre>



<h3 class="wp-block-heading">Moviendo el directorio THEMES</h3>



<pre class="wp-block-code"><code>$theme_root = WP_CONTENT_DIR . '/themes'; </code></pre>



<h3 class="wp-block-heading">Moviendo el directorio UPLOADS</h3>



<pre class="wp-block-code"><code>define( 'UPLOADS', 'blog/wp-content/uploads' );</code></pre>



<h2 class="wp-block-heading">Caché de objetos y compresión</h2>



<pre class="wp-block-code"><code>define( 'WP_CACHE', true );
define( 'WP_CACHE_KEY_SALT', 'bli6w8w9zrqufbfz79:' );
define( 'COMPRESS_CSS', true );
define( 'COMPRESS_SCRIPTS', true );
define( 'ENFORCE_GZIP', true );</code></pre>



<p class="wp-block-paragraph"><strong>WP_CACHE</strong> habilita la caché de objetos. Normalmente la utilizan  los plugins de gestión de caché.<br><strong>WP_CACHE_KEY_SALT</strong>, define la clave de caché. Puedes poner una aleatoria.<br><strong>COMPRESS_CSS Y COMPRESS_SCRIPT</strong>, comprimen los objetos de estilos y javascript.<br><strong>ENFORCE_GZIP,</strong> fuerza la entrega de la caché comprimida. Esta función tiene que estar habilitada en el servidor.</p>



<h2 class="wp-block-heading">Limitar las revisiones de posts</h2>



<pre class="wp-block-code"><code>define( 'WP_POST_REVISIONS', 5 );</code></pre>



<p class="wp-block-paragraph">Si editas mucho tu contenido, debes saber que cada vez que actualizas una entrada, página, producto&#8230; se guarda una revisión de esta, para que puedas volver a ella en cualquier momento. Esto hace que nuestra base de datos pueda crecer enormemente. Personalmente me he encontrado con páginas que tenían más de 500 revisiones guardadas.</p>



<p class="wp-block-paragraph">Creo que limitar a 5 es más que suficiente, incluso se puede desactivar por completo, indicando el parámetro false:</p>



<pre class="wp-block-code"><code>define( 'WP_POST_REVISIONS', false );</code></pre>



<h2 class="wp-block-heading">Guardado automático</h2>



<pre class="wp-block-code"><code>define( 'AUTOSAVE_INTERVAL', 30 );</code></pre>



<p class="wp-block-paragraph">Por defecto, WordPress realiza autoguardados de tus publicaciones cada 60 segundos. Puedes cambiar este valor con esta definición.</p>



<h2 class="wp-block-heading">Permanencia en la papelera</h2>



<pre class="wp-block-code"><code>define( 'EMPTY_TRASH_DAYS', 7 );</code></pre>



<p class="wp-block-paragraph">Cuando enviamos contenido a la papelera, esta permanece ahí durante 30 días por defecto. Podemos cambiar este valor por otro número de días.</p>



<h2 class="wp-block-heading">Habilitar WordPress Multisitio</h2>



<pre class="wp-block-code"><code>define( 'WP_ALLOW_MULTISITE', true );</code></pre>



<p class="wp-block-paragraph">Si deseas habilitar varias instalaciones de WordPress en un mismo sitio (WordPress multisitio), establece en TRUE esta consante.</p>



<h2 class="wp-block-heading">Redirección Blogs inexistentes</h2>



<pre class="wp-block-code"><code>define( 'NOBLOGREDIRECT', 'https://misitio.com' );</code></pre>



<p class="wp-block-paragraph">Redirige a tu sitio principal en caso de que alguiente intente acceder a un subdominio o subdirectorio inexistente.</p>



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



<p class="wp-block-paragraph">Antes de la versión 5.2 de WordPress, si un theme o complemento causaba un error fatal, el usuario solo veía una pantalla en blanco. A partir de WordPress 5.2, se muestra un mensaje error del estilo:</p>



<p class="wp-block-paragraph"><em> «El sitio está experimentando dificultades técnicas. Consulte la bandeja de entrada de correo electrónico del administrador de su sitio para obtener instrucciones».</em></p>



<p class="wp-block-paragraph">Pero en un entorno de desarrollo, seguramente necesitamos visualizar esos errores de PHP y para ello debemos ocultar este mensaje por defecto, además de habilitar el WP_DEBUG y WP_DEBUG_DISPLAY</p>



<pre class="wp-block-code"><code>define( 'WP_DISABLE_FATAL_ERROR_HANDLER', true );   // 5.2 and later 
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true ); </code></pre>



<p class="wp-block-paragraph">WP_DEBUG informa de errores y advertencias en temas y plugins, además de errores en la base de datos.</p>



<h2 class="wp-block-heading">Aumentar la memoria asignada a PHP</h2>



<p class="wp-block-paragraph">Por defecto, la memoria PHP asignada en WordPress es de solo 40MB. Es conveniente aumentar esta cantidad sobre todo si utilizamos un número considerable de plugins o editamos la web con builders como Elementor, Divi, Fusion, etc.</p>



<p class="wp-block-paragraph">Existen dos límites de memoria, el que tiene que ver con el frontend o web visible y el que tiene que ver con el panel de administración de WordPress.</p>



<p class="wp-block-paragraph"><strong>Aumentar el límite de memoria en el frontend</strong>:</p>



<pre class="wp-block-code"><code>define( 'WP_MEMORY_LIMIT', '128M' );</code></pre>



<p class="wp-block-paragraph"><strong>Aumentar el límite de memoria en el panel administrador:</strong></p>



<pre class="wp-block-code"><code>define( 'WP_MAX_MEMORY_LIMIT', '256M' );</code></pre>



<h2 class="wp-block-heading">Evitar que WordPress pida los datos FTP al instalar o actualizar complementos</h2>



<p class="wp-block-paragraph">Esta configuración suele estar habilitada por defecto en la mayoría de hostings, pero si WordPress te pide los datos de autenticación FTP cada vez que intentas actualizar o instalar un complemento define la siguiente constante:</p>



<pre class="wp-block-code"><code>define( 'FS_METHOD', 'direct' );</code></pre>



<h2 class="wp-block-heading">Habilitar un cron alternativo</h2>



<p class="wp-block-paragraph">Si por cualquier razón el cron por defecto de WordPress no realiza correctamente las tareas asignadas y quieres establecer un Cron alternativo, debes especificarlo con la siguiente constante:</p>



<pre class="wp-block-code"><code>define( 'ALTERNATE_WP_CRON', true );</code></pre>



<h2 class="wp-block-heading">Deshabilitar cron</h2>



<p class="wp-block-paragraph">También es posible que quieras deshabilitar el cron si no vas a hacer uso de él (programar publicaciones, programar backups, etc.):</p>



<pre class="wp-block-code"><code>define( 'DISABLE_WP_CRON', true );</code></pre>



<h2 class="wp-block-heading">Limitar los intervalos de cron</h2>



<p class="wp-block-paragraph">Establece el tiempo (en segundos) que deben transcurrir entre la ejecución de un cron y otro.</p>



<pre class="wp-block-code"><code>define( 'WP_CRON_LOCK_TIMEOUT', 60 );</code></pre>



<h2 class="wp-block-heading">Reparar automáticamente la base de datos</h2>



<p class="wp-block-paragraph">Si tienes problemas con tu base de datos y no puedes iniciar sesión, puedes definir esta constante para forzar una reparación automática.</p>



<pre class="wp-block-code"><code>define( 'WP_ALLOW_REPAIR', true );</code></pre>



<p class="wp-block-paragraph">Después accede a ruta: https://misitio.com<strong>/wp-admin/maint/repair.php</strong></p>



<p class="wp-block-paragraph">No es necesario iniciar sesión para ejecutar el proceso. Una vez resuelto el problema, borra esta consante o cámbiala a false.</p>



<h2 class="wp-block-heading">Desactivar el editor interno de themes y plugins</h2>



<p class="wp-block-paragraph">Una medida sencilla de mejorar la seguridad en nuestro WordPress es desactivando el editor interno de plugins y temas. De esta forma, si alguien se hace con nuestro usuario administrador, no podrá editar plantillas y plugin insertando código malicioso. (Para ello tendrá que tener también acceso al FTP y modificar los archivos insitu).</p>



<pre class="wp-block-code"><code>define( 'DISALLOW_FILE_EDIT', true );</code></pre>



<h2 class="wp-block-heading">Desactivar las actualizaciones automáticas de WordPress</h2>



<p class="wp-block-paragraph">Es conveniente no actualizar a la ligera un WordPress, sobre todo si es una versión media o mayor. Debemos asegurar antes de que tanto el theme como los complementos (plugins) tienen 100% compatibilidad con la nueva versión.</p>



<p class="wp-block-paragraph">Para impedir que WordPress se actualice automáticamente usa la constante:</p>



<pre class="wp-block-code"><code>define( 'WP_AUTO_UPDATE_CORE', false );</code></pre>



<p class="wp-block-paragraph">Pero sí es buena idea actualizar únicamente las versiones de seguridad y mantenimiento, para ello usamos la constante:</p>



<pre class="wp-block-code"><code>define( 'AUTOMATIC_UPDATER_DISABLED', false );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
define( 'CORE_UPGRADE_SKIP_NEW_BUNDLED', true );</code></pre>



<p class="wp-block-paragraph">La última constante &#8216;CORE_UPGRADE_SKIP_NEW_BUNDLED&#8217;, evitará que las actualizaciones de WordPress editen el directorio wp-content, evitando que se instalen los nuevos temas por defecto que incroporen las nuevas versiones.</p>



<h2 class="wp-block-heading">Desactiva toda actualización automática y manual</h2>



<p class="wp-block-paragraph">Si quieres llevar un control o mantenimiento exhaustivo de un proyecto, puedes impedir que se instalen o actualicen complementos con la constante:</p>



<pre class="wp-block-code"><code>define( 'DISALLOW_FILE_MODS', true );</code></pre>



<p class="wp-block-paragraph">Ni siquiera un usuario administrador podrá instalar o actualizar nada.</p>



<h2 class="wp-block-heading">Concluyendo&#8230;</h2>



<p class="wp-block-paragraph">Existen más constantes que puedes definir para configurar otros aspectos más avanzados de tu WordPress, puedes consultarlos en la documentación oficial: https://wordpress.org/support/article/editing-wp-config-php, aunque los comentados en este post suelen ser los más interesantes a tener en cuenta.</p>



<p class="wp-block-paragraph">Espero que te haya servido de utilidad y nos vemos en el siguiente post <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/optimizar-el-archivo-de-configuracion-de-wordpress-wp-config-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>Evitar que WordPress pida los datos FTP al instalar o actualizar un plugin o tema en localhost</title>
		<link>https://danisanchez.net/evitar-que-wordpress-pida-los-datos-ftp-al-instalar-o-actualizar-un-plugin-o-tema-en-localhost/</link>
					<comments>https://danisanchez.net/evitar-que-wordpress-pida-los-datos-ftp-al-instalar-o-actualizar-un-plugin-o-tema-en-localhost/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Fri, 24 Sep 2021 15:48:21 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=11828</guid>

					<description><![CDATA[Si trabajas con un servidor web o LAMP en modo local para desarrollar o probar tus proyectos web, es posible que WordPress te pida los datos del servidor FTP cuando intentas instalar o actualizar cualquier plugin o theme. Lo normal es que los datos sean: Hostname: localhost Usuario FTP: Tu usuario de sesión en Linux [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si trabajas con un servidor web o LAMP en modo local para desarrollar o probar tus proyectos web, es posible que WordPress te pida los datos del servidor FTP cuando intentas instalar o actualizar cualquier plugin o theme.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="500" height="592" src="https://danisanchez.net/wp-content/uploads/2021/09/captura-ftp-wordpress.jpg" alt="" class="wp-image-11829" srcset="https://danisanchez.net/wp-content/uploads/2021/09/captura-ftp-wordpress.jpg 500w, https://danisanchez.net/wp-content/uploads/2021/09/captura-ftp-wordpress-253x300.jpg 253w" sizes="auto, (max-width: 500px) 100vw, 500px" /></figure></div>



<p class="wp-block-paragraph">Lo normal es que los datos sean:</p>



<ul class="wp-block-list"><li><strong>Hostname</strong>: localhost</li><li><strong>Usuario FTP</strong>: Tu usuario de sesión en Linux</li><li><strong>Contraseña FTP</strong>: Tu contraseña de sesión en Linux</li></ul>



<p class="wp-block-paragraph">Pero si no quieres poner estos datos cada vez que hagas una de estas gestiones, puede añadir una línea a tu archivo de configuración de WordPress (wp-config.php) situado en el directorio raíz de tu instalación:</p>



<pre class="wp-block-code"><code>define('FS_METHOD', 'direct');</code></pre>



<p class="wp-block-paragraph">Puedes colocar esta línea a continuación de los parámetros de conexión de la base de datos, ni demasiado arriba ni demasiado debajo:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="749" height="609" src="https://danisanchez.net/wp-content/uploads/2021/09/captura-wp-config.jpg" alt="" class="wp-image-11830" srcset="https://danisanchez.net/wp-content/uploads/2021/09/captura-wp-config.jpg 749w, https://danisanchez.net/wp-content/uploads/2021/09/captura-wp-config-300x244.jpg 300w" sizes="auto, (max-width: 749px) 100vw, 749px" /></figure>



<p class="wp-block-paragraph">A partir de ahora, WordPress ya no te pedirá los datos de conexión FTP.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/evitar-que-wordpress-pida-los-datos-ftp-al-instalar-o-actualizar-un-plugin-o-tema-en-localhost/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title>Publicar en WordPress desde un formulario externo con Advanced Custom Fields</title>
		<link>https://danisanchez.net/publicar-en-wordpress-desde-un-formulario-externo-con-advanced-custom-fields/</link>
					<comments>https://danisanchez.net/publicar-en-wordpress-desde-un-formulario-externo-con-advanced-custom-fields/#comments</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 27 Jul 2021 15:39:11 +0000</pubDate>
				<category><![CDATA[Publicaciones]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[advanced custom field]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://www.gestionatuweb.net/?p=11318</guid>

					<description><![CDATA[En WordPress es posible publicar contenidos sin necesidad de entrar en el panel admin, por ejemplo, desde una página donde haya un formulario desde el que redactar el contenido. Para ellos nos vamos a valer del plugin «Advanced Custom Fields«, con el que no solo podremos guardar el contenido básico (título, contenido&#8230;), si no que [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En WordPress es posible publicar contenidos sin necesidad de entrar en el panel admin, por ejemplo, desde una página donde haya un formulario desde el que redactar el contenido.</p>



<p class="wp-block-paragraph">Para ellos nos vamos a valer del plugin «<strong>Advanced Custom Fields</strong>«, con el que no solo podremos guardar el contenido básico (título, contenido&#8230;), si no que podremos añadir otros campos personalizados que también serán guardados por el formulario.</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/Jgca5yvJkao" 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>



<p class="wp-block-paragraph">Con Advanced Custom Fields instalado vamos a <strong>crear un template o página</strong> que será la que muestre el formulario. </p>



<p class="wp-block-paragraph">Para ello recomiendo hacerlo sobre un <em>child-theme</em>, para no perder ningún cambio en caso de que el theme principal se actualice.</p>



<p class="wp-block-paragraph">Una vez creado el child-theme creamos un nuevo archivo<em> page-nuevo-post.php</em> con el siguiente código:</p>



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

&lt;main id="site-content" role="main"&gt;
&lt;div id="content"&gt;

    &lt;?php
        acf_form(array(
            'post_id' =&gt; 'new_post',
            'post_title' =&gt; true,
            'post_content' =&gt; true,
        ));
    ?&gt;

&lt;/div&gt;
&lt;/main&gt;

&lt;?php get_footer(); ?&gt;</code></pre>



<p class="wp-block-paragraph">La primera functión <strong>acf_form_head()</strong>, llama a los scripts necesarios de Advanced Custom Fields que deben cargarse en la cabecera de la página. Esta función no admite ningún parámetro, solo es necesario declararla.</p>



<p class="wp-block-paragraph">La siguiente función <strong>acf_form()</strong>, si admite varios parámetros. Ahora mismo ha sido declarada de la forma más básica, con los parámetros mínimos, donde en post_id indicamos que será un new_post y vamos a guardar tanto el post_title como el post_content.</p>



<p class="wp-block-paragraph">Al entrar en la página Nuevo Post veremos algo así: (dependiendo de vuestro theme):</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-1024x709.png" alt="" class="wp-image-11320" width="1024" height="709" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-1024x709.png 1024w, https://danisanchez.net/wp-content/uploads/2021/07/image-300x208.png 300w, https://danisanchez.net/wp-content/uploads/2021/07/image-768x531.png 768w, https://danisanchez.net/wp-content/uploads/2021/07/image.png 1211w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Donde lo único que podemos hacer es indicar un título y redactar el contenido del post.</p>



<p class="wp-block-paragraph">Al pulsar «Actualizar», el post será <strong>guardado de forma predeterminada como borrador</strong>.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-1-1024x243.png" alt="" class="wp-image-11321" width="1024" height="243" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-1-1024x243.png 1024w, https://danisanchez.net/wp-content/uploads/2021/07/image-1-300x71.png 300w, https://danisanchez.net/wp-content/uploads/2021/07/image-1-768x182.png 768w, https://danisanchez.net/wp-content/uploads/2021/07/image-1.png 1043w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Configurar el tipo de post y su estado</h2>



<p class="wp-block-paragraph">Con el siguiente parámetro podemos indicar el <strong>tipo de post</strong> que estamos guardando y su <strong>estado</strong>:</p>



<pre class="wp-block-code"><code>'new_post' =&gt; array(
                'post_type' =&gt; 'post',
                'post_status' =&gt; 'publish'
            ),</code></pre>



<p class="wp-block-paragraph">La función completa quedaría: </p>



<pre class="wp-block-code"><code>&lt;?php
        acf_form(array(
            'post_id' =&gt; 'new_post',
            'post_title' =&gt; true,
            'post_content' =&gt; true,
            'new_post' =&gt; array(
                'post_type' =&gt; 'post',
                'post_status' =&gt; 'publish'
            ),
        ));
?&gt;</code></pre>



<p class="wp-block-paragraph">Donde en<strong> post_type</strong> podemos indicar el tipo de post o CPT (custom post type): post, page, product, project&#8230; Y en <strong>post status</strong>, el estado en que se guardará:</p>



<ul class="wp-block-list"><li><strong>publish</strong>: Publicado.</li><li><strong>pending</strong>: Pendiente de revisión.</li><li><strong>draft</strong>: Borrador.</li></ul>



<h2 class="wp-block-heading">Personalizar el texto del botón de guardado</h2>



<p class="wp-block-paragraph">Con otro parámetro podemos personalizar el botón de publicar, ya que «Actualizar» no es lo más apropiado si lo que estamos es guardando un nuevo post:</p>



<pre class="wp-block-code"><code>'submit_value' =&gt; 'Publicar'</code></pre>



<h2 class="wp-block-heading">Mensaje de confirmación de guardado</h2>



<p class="wp-block-paragraph"><meta http-equiv="content-type" content="text/html; charset=utf-8">Por defecto, al guardar el post se recargará la página con el formulario vacío, algo que puede despistar a nuestros usuarios pensando que hayan podido hacer algo mal. Podemos insertar un mensaje de confirmación con el parámetro:</p>



<pre class="wp-block-code"><code>'updated_message' =&gt; __("¡Tu post se ha publicado!", 'acf')</code></pre>



<p class="wp-block-paragraph">De este modo, tras guardar una publicación y recargar la página aparecerá el mensaje:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="738" height="524" src="https://danisanchez.net/wp-content/uploads/2021/07/image-3.png" alt="" class="wp-image-11325" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-3.png 738w, https://danisanchez.net/wp-content/uploads/2021/07/image-3-300x213.png 300w" sizes="auto, (max-width: 738px) 100vw, 738px" /></figure>



<h2 class="wp-block-heading">Redirigir a una página tras guardar el post</h2>



<p class="wp-block-paragraph">Si lo preferimos, podemos redirigirle una página de agradecimiento, similar a la página de «gracias» de un formulario de contacto.</p>



<pre class="wp-block-code"><code>'return' =&gt; home_url('gracias-por-tu-articulo')</code></pre>



<p class="wp-block-paragraph">Donde <strong>home_url()</strong> es una función que devuelve nuestro dominio actual. Solo tenemos que especificar en su interior el <em>slug</em> de la página destino.</p>



<h2 class="wp-block-heading">Insertar custom fields en el formulario</h2>



<p class="wp-block-paragraph">Si queremos añadir información adicional a las publicaciones a través de campos personalizados (custom fields), estos también pueden ser llamados en el formulario.</p>



<p class="wp-block-paragraph">Para ello, en primer lugar <strong>crearemos un nuevo grupo de campos</strong> con Advanced Custom Fields al que llamaremos «<strong>Info Post</strong>«.</p>



<p class="wp-block-paragraph">Dentro crearemos 3 campos:</p>



<ul class="wp-block-list"><li>Campo de texto: <strong>Información extra</strong>.</li><li>Campo numérico: <strong>Año</strong>.</li><li>Campo de imagen: <strong>Imagen destacada</strong>.</li></ul>



<p class="wp-block-paragraph">En las reglas de ubicación vamos a indicar que estos campos aparezcan solamente en los posts de tipo entrada. Aunque esto solo afectará al «backend» de WordPress, veremos un poco más adelante cómo mostrarlos en el formulario de ACF.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-10.png" alt="" class="wp-image-11334" width="945" height="680" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-10.png 945w, https://danisanchez.net/wp-content/uploads/2021/07/image-10-300x216.png 300w, https://danisanchez.net/wp-content/uploads/2021/07/image-10-768x553.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></figure>



<p class="wp-block-paragraph">Para el campo de imagen vamos a especificar que nos devuelva solamente el ID de la imagen:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="686" height="593" src="https://danisanchez.net/wp-content/uploads/2021/07/image-5.png" alt="" class="wp-image-11328" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-5.png 686w, https://danisanchez.net/wp-content/uploads/2021/07/image-5-300x259.png 300w" sizes="auto, (max-width: 686px) 100vw, 686px" /></figure>



<p class="wp-block-paragraph">Para que los <strong>campos personalizados se muestren en el formulario (frontend)</strong>, solo tenemos que añadir el siguiente parámetro:</p>



<pre class="wp-block-code"><code>'field_groups' =&gt; &#91;'clave_grupo']</code></pre>



<p class="wp-block-paragraph">Donde la clave del grupo podemos encontrarla en nuestra lista de grupos de campos:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-6.png" alt="" class="wp-image-11329" width="1012" height="361" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-6.png 1012w, https://danisanchez.net/wp-content/uploads/2021/07/image-6-300x107.png 300w, https://danisanchez.net/wp-content/uploads/2021/07/image-6-768x274.png 768w" sizes="auto, (max-width: 1012px) 100vw, 1012px" /></figure>



<p class="wp-block-paragraph">De forma que nuestra función general quedaría:</p>



<pre class="wp-block-code"><code>&lt;?php
        acf_form(array(
            'post_id' =&gt; 'new_post',
            'post_title' =&gt; true,
            'post_content' =&gt; true,
            'new_post' =&gt; array(
                'post_type' =&gt; 'post',
                'post_status' =&gt; 'publish'
            ),
            'submit_value' =&gt; 'Publicar',
            'updated_message' =&gt; __("¡Tu post se ha publicado!", 'acf'),
            'field_groups' =&gt; &#91;'group_60ffb5cfa3984']
        ));
?&gt;</code></pre>



<p class="wp-block-paragraph">Ahora al acceder a la página «Nuevo Post», veremos nuestros nuevos campos:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-7.png" alt="" class="wp-image-11330" width="760" height="478" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-7.png 760w, https://danisanchez.net/wp-content/uploads/2021/07/image-7-300x189.png 300w" sizes="auto, (max-width: 760px) 100vw, 760px" /></figure>



<h2 class="wp-block-heading">Usar un campo personalizado para establecer la imagen destacada del post</h2>



<p class="wp-block-paragraph"><strong>acf_form()</strong> no dispone de parámetros para establecer la imagen destacada del post, algo que no se comprende muy bien, pues bastaría con asociar cualquier ID de imagen de nuestra biblioteca de medios con el <em>_thumbnail_id</em> del post.</p>



<p class="wp-block-paragraph">Para ello tenemos que valernos de un pequeño truco, el cual consistirá en usar un campo personalizado para establecer la imagen destacada del post. Para ello ello hemos creado el campo personalizado «Imagen destacada».</p>



<p class="wp-block-paragraph">Pues bien, solo tenemos que pegar este snippet en el archivo de funciones (functions.php) de nuestro child-theme:</p>



<pre class="wp-block-code"><code>function acf_set_featured_image( $value, $post_id, $field  ){
    
    if($value != ''){
	    //Add the value which is the image ID to the _thumbnail_id meta data for the current post
	    add_post_meta($post_id, '_thumbnail_id', $value);
    }
 
    return $value;
}

// acf/update_value/name={$field_name} - filter for a specific field based on it's name
add_filter('acf/update_value/name=campo_de_imagen', 'acf_set_featured_image', 10, 3);</code></pre>



<p class="wp-block-paragraph">Este snippet lo he extraído del foro de Advanced Custom Fields gracias al usuario <strong><a href="https://support.advancedcustomfields.com/forums/topic/set-image-as-featured-image/#post-2275" target="_blank" rel="noreferrer noopener nofollow">Jonathan</a></strong>.</p>



<p class="wp-block-paragraph">Básicamente lo que hace es tomar nuestro campo personalizado de imagen, el cual tenemos que especificar su value en el hook, y establecerlo como imagen destacada del post.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-8.png" alt="" class="wp-image-11331" width="629" height="413" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-8.png 629w, https://danisanchez.net/wp-content/uploads/2021/07/image-8-300x197.png 300w" sizes="auto, (max-width: 629px) 100vw, 629px" /></figure>



<pre class="wp-block-code"><code>add_filter('acf/update_value/name=imagen_destacada', 'acf_set_featured_image', 10, 3);</code></pre>



<p class="wp-block-paragraph">Y al guardar o actualizar el post se establecerá como imagen destacada de este.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://danisanchez.net/wp-content/uploads/2021/07/image-9-1024x604.png" alt="" class="wp-image-11332" width="1024" height="604" srcset="https://danisanchez.net/wp-content/uploads/2021/07/image-9-1024x604.png 1024w, https://danisanchez.net/wp-content/uploads/2021/07/image-9-300x177.png 300w, https://danisanchez.net/wp-content/uploads/2021/07/image-9-768x453.png 768w, https://danisanchez.net/wp-content/uploads/2021/07/image-9.png 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Y hasta aquí el post de hoy, podéis seguir practicando y aprendiendo nuevos parámetros y ajustes de <strong>acf_form()</strong> en:</p>



<p class="wp-block-paragraph"><a href="https://www.advancedcustomfields.com/resources/acf_form/" target="_blank" rel="noreferrer noopener nofollow"><strong>DOCUMENTACIÓN ADVANCED CUSTOM FIELDS: acf_form()</strong></a></p>



<p class="wp-block-paragraph">Ahh, y todo esto lo hemos hecho usando la versión FREE de ACV. 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>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/publicar-en-wordpress-desde-un-formulario-externo-con-advanced-custom-fields/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
	</channel>
</rss>
