En nuestro post anterior, acabamos teniendo un repositorio con docker-compose listo para usar, junto con una instalación de WordPress que utiliza composer y wpackagist, así que ahora vamos a personalizar nuestra instalación de WordPress para sacarle el máximo partido a WordPress de manera profesional.

En nuestro caso tenemos un archivo llamado config-prod.php.dist
que es el que tomaremos como base. Lo primero que vamos a hacer es copiar y pegar el mismo archivo pero con el nombre config-dev.php
. Este archivo será nuestra configuración de desarrollo, para producción tendremos un archivo llamado config-prod.php
Configuración de la base de datos
En nuestro docker tenemos una base de datos mariaDB, con el usuario root. Pero para producción no es una opción válida. Lo primero es el usuario de esa base de datos, entramos en PHPmyAdmin (docker.dev:8090) y vamos a «Privilegios» y luego hacemos clic en «Agregar cuenta de usuario». Ahí lo que hacemos es añadir un usuario y solo darle acceso a la BD de WordPress, en nuestro caso la hemos llamado «wordpress».
Este mismo usuario es el que añadimos a la configuración en config-dev.php
las globales 'DB_USER' y 'DB_PASSWORD'
Como ya sabemos WordPress pone un prefijo a todas las tablas, por defecto es wp_
nosotros vamos a cambiarlo porque así si alguien encuentra un agujero de seqguridad para hacer SQL Injection al menos no sabrá de primeras el nombre de las tablas.
Así que lo que hacemos es editar el fichero config-dev.php
y cambiar la linea 52 por otro prefijo distinto: $table_prefix = 'wp_';
Creo que no hay que comentarlo, pero… 123456 no es una contraseña decente. Tener contraseñas fuertes es obligatorio y si son muchas, se olvidan,… utilizar algo como KeePass y no un txt o un Excel 😉
Si ya tienes una BD y lo que quieres es migrar los datos de producción, una opción es utilizar WP Sync DB o con PHPMyAdmin hacer un dump de la base de datos de producción.
Seguridad en WordPress
Las salt de nuestras claves deben ser únicas, una buena solución es utilizar la API de WordPress para definirlas. Entrando en https://api.wordpress.org/secret-key/1.1/salt/ obtendremos una serie de salt unicas que es necesario copiar a nuestro wp-config
define('AUTH_KEY', 's[!34-gn%U9hj=#sVSC$)@IQQ+>O>|!.o Sj^S{>82gU}-Uw[fg~qs,a5f|+ox.h');
define('SECURE_AUTH_KEY', '4b~_T?p%Cl.N[_0H597la/Q`sMX3PYBzj5:&6B{ZB=%D:Q%,C%pM|c]PAIs`<Zxv');
define('LOGGED_IN_KEY', 'b@aO&N/D/ju4.bgoR$j$us} f;Z<<|?#vv=;xS9n|/n CWUQ;#a6 oWs23izQl; ');
define('NONCE_KEY', '(YnY(mR]x0yqa=*oG-6G]-Xq5dWo#-]*hCqT-z]NwOM0|l5>;UjJ~|Y2[wEJqgoH');
define('AUTH_SALT', 'n6D$ygWm.F--6*Wi]A*z6G-]Lw[451V`[BZVgU!+:i?H:#pO2VleHU-0YwP5E|dM');
define('SECURE_AUTH_SALT', '@Niqg+eMf*/lWmo][WPaC<@YrjcT+&]IV$+1~&1BK9!Pw#fS!RezjM/0!!0dvB~V');
define('LOGGED_IN_SALT', '!}|zVjAi|YC2vI(0X-vgs|Ty=XM48D[pd=;.-X3Az,Dk/b6=Eb!E!U19DfRfq[q@');
define('NONCE_SALT', 'OOHM&8|{|USkdOdRH((S1+:i;E}Mjs!I/JrK(KU7E{X{RB;8|_f|n!<Uihvc ?!+');
No tenemos mucho que comentar aquí, lo mejor es seguir esta guía: https://codex.wordpress.org/Hardening_WordPress
Robots.txt
No soy experto en SEO, pero lo mejor para no liarla con el contenido duplicado que mejor que tener un fichero robots.txt mínimo que debe estar dentro de la carpeta public
y contener lo siguiente:
Sitemap: http://www.docker.dev:8080/sitemap.xml
User-Agent: *
Disallow: /*/feed/
Disallow: /*/trackback/
Disallow: /*/attachment/
Disallow: /author/
Disallow: /category/*/page/
Disallow: /category/*/feed/
Disallow: /comments/
Disallow: /page/
Disallow: /tag/*/page/
Disallow: /tag/*/feed/
Disallow: /xmlrpc.php
Disallow: /*?s=
Cuidado que está personalizado para nuestro sitio, si deseamos usarlo en otro hay que modificar la ruta del sitemap.xml Tambien hay plugins que puede ayudarnos a generar este fichero.
Modificando la configuración de WordPress
No nos cansaremos de decirlo, WordPress es muy configurable y tenemos miles de opciones para definir en wp-config. Algunas de las más interesantes pueden ser:
- AUTOSAVE_INTERVAL Es el intervalo de autoguardado, podemos poner los segundos que queramos, pero cada 2 minutos es una buena opción.
define('AUTOSAVE_INTERVAL',120);
- WP_CACHE: Activa la caché propia de WordPress, aunque hay plugins como W3 Total Caché que nos ayudan a configurarla, esta opción puede ser interesante. Cuidado con Activarla en desarrollo, puede darnos algún quebradero de cabeza.
define('WP_CACHE', true);
- WPLANG: Es el idioma del sitio.
define('WPLANG', 'es_ES');
- WP_POST_REVISIONS: Las revisiones de los post son geniales, pero ralentizan cuando hay demasiadas, lo mejor es no acostumbrarlos a ellas y tenerlas desactivadas.
define('WP_POST_REVISIONS', false);
- Otra opción es limitar el numero de versiones utilizando
define ('WP_POST_REVISIONS', 3);
Hay muchas más opciones como la de configurar el FTP, de momento no vamos a adentrarnos más.
Debugging
Aunque con XDebug instalado no tendremos problemas en hacer debug, aquí hay algunas opciones que pueden servirnos a la hora de encontrar un problema:
- WP_DEBUG: Habilita todos los errores y notificaciones de PHP en producción debe estar a desactivado, pero en desarrollo debemos activarlo.
define('WP_DEBUG', true)
- WP_DEBUG_LOG: Trabaja en conjunto con la anterior opción. Deja en fichero wp-content/debug.log información de log.
define('WP_DEBUG_LOG', true)
- SCRIPT_DEBUG: Hace que WordPress no mininifique los ficheros js por defecto
- SAVEQUERIES Saber que queries se están ejecutando para mejorarlas o para saber si una está fallando es necesario. Una buena opción es activar este parámetro.
define('SAVEQUERIES', true);
Algún plugin como Debug Bar también puede sernos muy útil.
Sacandole partido a wpackagist
wpackagist es donde encontraremos todos los plugins y themes necesarios para sacarle partido a WordPress, ya solo nos queda añadirlos al fichero composer.json e instalarlos.
Lista de plugins a tener en cuenta
- w3 total cache para tener el control sobre la cache de WordPress
- wp super minify para mantener todos los css y js al mínimo.
- wordpress seo yoast para configurar todo el SEO
- akismet para mantener el spam y los comentarios siempre protegidos
- jetpack este plugin hace de todo
- google analytics for wordpress para de un vistazo tener analytics controlado.
- login lockdown para limitar el numero de intentos de login
- backwpup para mantener todo a salvo.
Ahora otra serie de plugins que merece la pena revisar
- broken link checker Revisa si hay algún link roto. Quizás lo mejor sea no tenerlo siempre activo y solo hacerlo unas horas
- tweet old post para twittear post antiguos, bastante util si se sabe utilizar bien.
- ninja forms para hacer formularios molones
- woocommerce para nuestra tienda online 😉
Optimizando
La mejor manera de saber que optimizar en WordPress es utilizar servicios externos que nos indiquen que podemos mejorar. Aquí una lista de servicios que nos darán una puntuación de nuestro sitio para poder optimizarlo.
- https://developers.google.com/speed/pagespeed/insights/
- https://gtmetrix.com/
- http://www.webpagetest.org/
- https://loadimpact.com/
- http://yslow.org/
Pero para utilizar todas estas herramientas es necesario que la web esté online. Si no queremos publicar nuestro sitio todavía, podemos utilizar https://www.sitespeed.io/
Coding Standard
Ya estamos a punto de tocar código a desarrollar. Pero antes debemos tener en cuenta que WordPress tiene un coding standard: https://codex.wordpress.org/WordPress_Coding_Standards. Son una serie de reglas, para que todos escribamos código más o menos de la misma manera y debemos utilizarlas cuando estemos desarrollando para WordPress. Normalmente nuestro IDE (PHPStorm) tendrá documentación al respecto. En nuestro caso para PHPStorm la tenemos aquí: https://www.jetbrains.com/help/phpstorm/2016.2/using-php-code-sniffer-tool.html
Conclusiones
Utilizando composer, instalando pocos plugins y siendo buenos desarrollados es posible utilizar WordPress de manera profesional sin quebraderos de cabeza y con buenos resultados. ¿Y tú? conoces algún plugin que deba estar en la lista. alguno que se nos haya olvidado. Alguna manera de mejorar el desarrollo con WordPress.
- Security in WordPress: https://codex.wordpress.org/Hardening_WordPress
- WP Sync DB: https://github.com/wp-sync-db/wp-sync-db
- https://codex.wordpress.org/WordPress_Coding_Standards
gran guía recopilatoria de buenas prácticas en wordpress, y ademas vale también para las instalaciones que normales (sin composer) 👏👏👏
Me gustaMe gusta