<?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/category/wordpress-cursos/feed/" rel="self" type="application/rss+xml" />
	<link>https://danisanchez.net</link>
	<description></description>
	<lastBuildDate>Tue, 17 Feb 2026 20:12:06 +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>Permitir iframes en Dynamic Fields de JetEngine</title>
		<link>https://danisanchez.net/permitir-iframes-en-dynamic-fields-de-jetengine/</link>
					<comments>https://danisanchez.net/permitir-iframes-en-dynamic-fields-de-jetengine/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 20:12:06 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[jetengine]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15363</guid>

					<description><![CDATA[Si necesitamos mostrar un iframe llamado desde un campo personalizado con un widget normal de HTML, necesitamos habilitar el uso de iframes en los dynamics fields de JetEngine:]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si necesitamos mostrar un iframe llamado desde un campo personalizado con un widget normal de HTML, necesitamos habilitar el uso de iframes en los dynamics fields de JetEngine:</p>



<pre class="wp-block-code"><code>add_filter( 'wp_kses_allowed_html', function ( $tags, $context ){
    if ( 'post' === $context ) {
        $tags&#91;'iframe'] = array(
        'src' => true,
        'width' => true,
        'height' => true,
        'width' => true, 
        'frameborder' => true,
        'allowtransparency' => true,
        'allow' => true,
        );
    }
    return $tags;
},10,2);</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/permitir-iframes-en-dynamic-fields-de-jetengine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>Archivo wp-config.php por defecto de WordPress</title>
		<link>https://danisanchez.net/archivo-wp-config-php-por-defecto-de-wordpress/</link>
					<comments>https://danisanchez.net/archivo-wp-config-php-por-defecto-de-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Mon, 24 Nov 2025 06:53:36 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wp-config.php]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=15374</guid>

					<description><![CDATA[Este es el archivo de configuración de WordPress por defecto: No obstante, este archivo también se suele encontrar en las instalaciones de WordPress como wp-config-sample.php]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Este es el archivo de configuración de WordPress por defecto:</p>



<pre class="wp-block-code"><code>&lt;?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the website, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
 *
 * @package WordPress
 */

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'database_name_here' );

/** Database username */
define( 'DB_USER', 'username_here' );

/** Database password */
define( 'DB_PASSWORD', 'password_here' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         'put your unique phrase here' );
define( 'SECURE_AUTH_KEY',  'put your unique phrase here' );
define( 'LOGGED_IN_KEY',    'put your unique phrase here' );
define( 'NONCE_KEY',        'put your unique phrase here' );
define( 'AUTH_SALT',        'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT',   'put your unique phrase here' );
define( 'NONCE_SALT',       'put your unique phrase here' );

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 *
 * At the installation time, database tables are created with the specified prefix.
 * Changing this value after WordPress is installed will make your site think
 * it has not been installed.
 *
 * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#table-prefix
 */
$table_prefix = 'wp_';

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
 */
define( 'WP_DEBUG', false );

/* Add any custom values between this line and the "stop editing" line. */



/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
	define( 'ABSPATH', __DIR__ . '/' );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
</code></pre>



<p class="wp-block-paragraph">No obstante, este archivo también se suele encontrar en las instalaciones de WordPress como <strong>wp-config-sample.php</strong></p>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/archivo-wp-config-php-por-defecto-de-wordpress/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>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>Importar un proyecto WordPress en un contenedor Docker</title>
		<link>https://danisanchez.net/importar-un-proyecto-wordpress-en-un-contenedor-docker/</link>
					<comments>https://danisanchez.net/importar-un-proyecto-wordpress-en-un-contenedor-docker/#respond</comments>
		
		<dc:creator><![CDATA[dani.sanchez]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 17:43:38 +0000</pubDate>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[docker]]></category>
		<guid isPermaLink="false">https://danisanchez.net/?p=13792</guid>

					<description><![CDATA[En este vídeo-taller veremos cómo importar un proyecto real de WordPress en un contenedor Docker local. En resumen los pasos serían: El comando para importar la base de datos desde terminal: Taller en Vídeo]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En este vídeo-taller veremos cómo importar un proyecto real de WordPress en un contenedor Docker local.</p>



<p class="wp-block-paragraph">En resumen los pasos serían:</p>



<ul class="wp-block-list">
<li>Levantar un proyecto WordPress limpio en Docker (<a href="https://danisanchez.net/instalar-wordpress-mysql-phpmyadmin-desde-docker-compose/" data-type="post" data-id="13746">ver tutorial</a>).</li>



<li>Reemplazar el contenido del wp-content.</li>



<li>Editar el archivo wp-config.php.</li>



<li>Importar la base de datos.</li>



<li>Editar las URL desde phpMyAdmin.</li>
</ul>



<p class="wp-block-paragraph">El comando para importar la base de datos desde terminal:</p>



<pre class="wp-block-code"><code>sudo docker exec -i contenedor-mysql-name mysql -uroot -pclaveroot bbdd-name &lt; bbdd.sql</code></pre>



<ul class="wp-block-list">
<li>Sustituye <strong>contenedor-mysql-name</strong> por el nombre de tu contenedor MySQL en Docker.</li>



<li>Sustituye <strong>claveroot</strong> por tu clave de usuario root en MySQL.</li>



<li>Sustituye <strong>bbdd-name</strong> por el nombre de tu base de datos en Docker.</li>



<li>Sustituye <strong>bbdd.sql</strong> por el nombre del archivo SQL de la base de datos a importar.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Taller en Vídeo</p>
</blockquote>



<iframe width="100%" height="400" src="https://www.youtube-nocookie.com/embed/oZZQAkwQiBA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
]]></content:encoded>
					
					<wfw:commentRss>https://danisanchez.net/importar-un-proyecto-wordpress-en-un-contenedor-docker/feed/</wfw:commentRss>
			<slash:comments>0</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 loading="lazy" 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="auto, (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>
	</channel>
</rss>
