Wordpress

Wordpress y su ecosistema

Wp Cli

Notas rápidas

Wp Cli

Tips rápidos para WP-CLI

Introducción

Wp-cli es una herramienta muy potente para los webmaster y administradores de sitios. Es un cansancio y una hartura la falta de compromiso de los clientes y de sus empresas de mantenimiento de la página web (esos mismo que luego van diciendole al cliente que deberían migrar su contenido a sus servidores, que ellos, son diseñadores, desarrolladores, hostess, pintores y mecanicos de vuelo, si hace falta, pero luego no tienen ni backups, ni seguridad, ni nada)

Actualiza todo

Funcionara si no hay problemas derivados por php obsoleto, algun plugin desastre, etc,

Estructura de cPanel

cd ~/public_html && wp core update && wp plugin upgrade --all && wp theme upgrade --all
php -d memory_limit=512M "$(which wp)" core update && php -d memory_limit=512M "$(which wp)" plugin upgrade --all  && php -d memory_limit=512M "$(which wp)" theme upgrade --all

Normal

wp core update && wp plugin upgrade --all && wp theme upgrade --all

Usuarios

Crear un administrador de Wordpress con wp cli

# wp user create
$ wp user create castris fake@castris.com --role=administrator
Success: Created user 12.
Password: 0VV3gUlNMECOPIESQUENOVALGOGFO4ht

Borrar un usuario de Wordpress con wp-cli

wp user delete
wp user delete 12
--reassign parameter not passed. All associated posts will be deleted. Proceed? [y/n] y
Success: Removed user 12 from http://www.dunlopillo.es.

Activar el auotupdate de los plugins

wp plugin auto-updates enable --all

wp pluing

Forzar la actualizacion del WP con WP Cli

A veces entramos en un bucle feo, proque el usuario tiene o anda con versiones 54, o simialr, y no hay manera.

Quizas tambien fue hackeado y manipulado.

wp core download --force

Atención a este método. Siempre backup antes, por favor

Ejemplo

[comprascc@srv109 public_html]$ php -d memory_limit=512M "$(which wp)" core update && php -d memory_limit=512M "$(which wp)" plugin upgrade --all  && php -d memory_limit=512M "$(which wp)" theme upgrade --all
Fatal error: Uncaught Error: Call to undefined function get_magic_quotes_gpc() in /home/comprascc/public_html/wp-includes/load.php:926
Stack trace:
#0 /home/comprascc/public_html/wp-settings.php(400): wp_magic_quotes()
#1 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1374): require('/home/comprascc...')
#2 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1293): WP_CLI\Runner->load_wordpress()
#3 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php(28): WP_CLI\Runner->start()
#4 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php(83): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#5 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php(32): WP_CLI\bootstrap()
#6 phar:///usr/local/bin/wp/php/boot-phar.php(20): include('phar:///usr/loc...')
#7 /usr/local/bin/wp(4): include('phar:///usr/loc...')
#8 {main}
  thrown in /home/comprascc/public_html/wp-includes/load.php on line 926
Error: El sitio está experimentando dificultades técnicas.
[comprascc@srv109 public_html]$ wp core update
Fatal error: Uncaught Error: Call to undefined function get_magic_quotes_gpc() in /home/comprascc/public_html/wp-includes/load.php:926
Stack trace:
#0 /home/comprascc/public_html/wp-settings.php(400): wp_magic_quotes()
#1 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1374): require('/home/comprascc...')
#2 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php(1293): WP_CLI\Runner->load_wordpress()
#3 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php(28): WP_CLI\Runner->start()
#4 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php(83): WP_CLI\Bootstrap\LaunchRunner->process(Object(WP_CLI\Bootstrap\BootstrapState))
#5 phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php(32): WP_CLI\bootstrap()
#6 phar:///usr/local/bin/wp/php/boot-phar.php(20): include('phar:///usr/loc...')
#7 /usr/local/bin/wp(4): include('phar:///usr/loc...')
#8 {main}
  thrown in /home/comprascc/public_html/wp-includes/load.php on line 926
Error: El sitio está experimentando dificultades técnicas.
[comprascc@srv109 public_html]$ wp core update^C
[comprascc@srv109 public_html]$ wp core download --force
Downloading WordPress 6.6.1 (en_US)...
md5 hash verified: a15f676931133623b7b347f1fabc966b
Cleaning up files...
File removed: wp-includes/images/wlw/wp-comments.png
File removed: wp-includes/images/wlw/wp-watermark.png
File removed: wp-includes/images/wlw/wp-icon.png
File removed: wp-includes/Requests/Transport/fsockopen.php
File removed: wp-includes/Requests/Transport/cURL.php
File removed: wp-includes/Requests/Cookie/Jar.php
File removed: wp-includes/Requests/Auth.php
File removed: wp-includes/Requests/Hooker.php
File removed: wp-includes/Requests/IPv6.php
File removed: wp-includes/Requests/Exception/Transport/cURL.php
File removed: wp-includes/Requests/Exception/HTTP.php
File removed: wp-includes/Requests/Exception/Transport.php
File removed: wp-includes/Requests/Exception/HTTP/502.php
File removed: wp-includes/Requests/Exception/HTTP/Unknown.php
File removed: wp-includes/Requests/Exception/HTTP/412.php
File removed: wp-includes/Requests/Exception/HTTP/408.php
File removed: wp-includes/Requests/Exception/HTTP/431.php
File removed: wp-includes/Requests/Exception/HTTP/501.php
File removed: wp-includes/Requests/Exception/HTTP/500.php
File removed: wp-includes/Requests/Exception/HTTP/407.php
File removed: wp-includes/Requests/Exception/HTTP/416.php
File removed: wp-includes/Requests/Exception/HTTP/428.php
File removed: wp-includes/Requests/Exception/HTTP/406.php
File removed: wp-includes/Requests/Exception/HTTP/504.php
File removed: wp-includes/Requests/Exception/HTTP/411.php
File removed: wp-includes/Requests/Exception/HTTP/414.php
File removed: wp-includes/Requests/Exception/HTTP/511.php
File removed: wp-includes/Requests/Exception/HTTP/410.php
File removed: wp-includes/Requests/Exception/HTTP/403.php
File removed: wp-includes/Requests/Exception/HTTP/400.php
File removed: wp-includes/Requests/Exception/HTTP/505.php
File removed: wp-includes/Requests/Exception/HTTP/413.php
File removed: wp-includes/Requests/Exception/HTTP/404.php
File removed: wp-includes/Requests/Exception/HTTP/306.php
File removed: wp-includes/Requests/Exception/HTTP/304.php
File removed: wp-includes/Requests/Exception/HTTP/405.php
File removed: wp-includes/Requests/Exception/HTTP/429.php
File removed: wp-includes/Requests/Exception/HTTP/417.php
File removed: wp-includes/Requests/Exception/HTTP/409.php
File removed: wp-includes/Requests/Exception/HTTP/402.php
File removed: wp-includes/Requests/Exception/HTTP/418.php
File removed: wp-includes/Requests/Exception/HTTP/305.php
File removed: wp-includes/Requests/Exception/HTTP/415.php
File removed: wp-includes/Requests/Exception/HTTP/401.php
File removed: wp-includes/Requests/Exception/HTTP/503.php
File removed: wp-includes/Requests/Response.php
File removed: wp-includes/Requests/Utility/CaseInsensitiveDictionary.php
File removed: wp-includes/Requests/Utility/FilteredIterator.php
File removed: wp-includes/Requests/IRI.php
File removed: wp-includes/Requests/Response/Headers.php
File removed: wp-includes/Requests/Cookie.php
File removed: wp-includes/Requests/IDNAEncoder.php
File removed: wp-includes/Requests/Auth/Basic.php
File removed: wp-includes/Requests/Proxy.php
File removed: wp-includes/Requests/Transport.php
File removed: wp-includes/Requests/Session.php
File removed: wp-includes/Requests/Hooks.php
File removed: wp-includes/Requests/SSL.php
File removed: wp-includes/Requests/Proxy/HTTP.php
File removed: wp-includes/Requests/Exception.php
File removed: wp-includes/css/dist/editor/editor-styles-rtl.css
File removed: wp-includes/css/dist/editor/editor-styles-rtl.min.css
File removed: wp-includes/css/dist/editor/editor-styles.css
File removed: wp-includes/css/dist/editor/editor-styles.min.css
File removed: wp-includes/ID3/license.commercial.txt
File removed: wp-includes/wlwmanifest.xml
File removed: wp-includes/js/jquery/ui/widget.min.js
File removed: wp-includes/js/jquery/ui/position.min.js
File removed: wp-includes/js/wp-a11y.min.js
File removed: wp-includes/js/wp-a11y.js
File removed: wp-includes/random_compat/random.php
File removed: wp-includes/random_compat/byte_safe_strings.php
File removed: wp-includes/random_compat/random_bytes_com_dotnet.php
File removed: wp-includes/random_compat/random_bytes_dev_urandom.php
File removed: wp-includes/random_compat/random_int.php
File removed: wp-includes/random_compat/random_bytes_libsodium_legacy.php
File removed: wp-includes/random_compat/random_bytes_libsodium.php
File removed: wp-includes/random_compat/cast_to_int.php
File removed: wp-includes/random_compat/error_polyfill.php
File removed: wp-includes/random_compat/random_bytes_mcrypt.php
File removed: wp-admin/css/ie-rtl.css
File removed: wp-admin/css/ie.min.css
File removed: wp-admin/css/ie-rtl.min.css
File removed: wp-admin/css/ie.css
File removed: wp-admin/js/wp-fullscreen-stub.js
File removed: wp-admin/js/wp-fullscreen-stub.min.js
86 files cleaned up.
Success: WordPress downloaded.

Actualizar WP Cli

Como root si la aplicación esta en el sistema de forma global

sudo wp cli update
You have version 2.5.0-alpha-3f4c34b. Would you like to update to 2.5.0? [y/n] Y
Downloading from https://github.com/wp-cli/wp-cli/releases/download/v2.5.0/wp-cli-2.5.0.phar...
md5 hash verified: 20ab512b12d766a2d2f51cc8f5c43411
New version works. Proceeding to replace.
Success: Updated WP-CLI to 2.5.0.
Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Wp Cli

Crear un sitio wordpress con wp cli

Introducción

El uso de wp cli para la administración de sitios con wordpress es el paradigma de la eficiencia, sobre todo para los que amamos el shell. Una de las cosas que mejor podemos hacer es instalar wp desde shell.

Requisitos previos

Instalacion de wordpress en el shell con wp cli

Accedemos con nuestro usuario al servidor.

El ejemplo que vamos a explicar es en un servidor con cpanel en el dominio principal.

Primero debemos confirmar que el certificado SSL se ha instalado, ya que es recomendable hacer la instalación sobre la base de usar https

wp core download

$ cd public_html
$ wp core download --locale=es_ES
Downloading WordPress 5.7.2 (es_ES)...
md5 hash verified: 775ec9305bbe9729568fbc7b5fb7b71d
Success: WordPress downloaded.

wp core config

$ wp core config --dbhost=localhost --dbname=DBNAME --dbuser=DBUSER --dbpass=PASSWORD
Success: Generated 'wp-config.php' file.

Verificamos por si hubo algun problema de escapoes o similar.

cat wp-config.php | grep -i db
define( 'DB_NAME', 'cpuser_dbname' );
define( 'DB_USER', 'cpuser_dbuser' );
define( 'DB_PASSWORD', 'PaSsW0Rd€#?' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );
define( 'LOGGED_IN_KEY',     '/whuB6w+(RdHHHHHHHHHHHHHHH=wZ9Up3F0i!9Z@<Ey#P`@PDY^B;^[06Mgy' );

cPanel permisos (PHP FPM)

Los permisos de cpanel para un servidor con PHP-FPM son especificos, y muchas veces la literatura en google de lso expertos, nos lleva a las tipicas cosas que no funcionan.

Por defecto instala ficheros con permisos 664 y 775 para directorios, lo cual no es permisible en cPanel en ese escenario.

Solución

# Atención que el comando debe ejecutarse en el directrpoio public_html donde estabamos
# $ cd ~/public_html
$ find . -type f -exec chmod 644 {} \;
$ find . -type d -exec chmod 755 {} \;
$ chmod 750 ../public_html/

Finalizar la instalación

wp core install

$ wp core install --url=domainio.tld --title="We Welle" --admin_user=NOMBREADMIN --admin_password=contraseñasincaracteresextendidos --admin_email=email@user
Success: WordPress installed successfully.
Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Wp Cli

Mover un sitio web de un path a otro cambiando las url con wp cli

Introducción

A veces a algun diseñador web se lo ocurrió aquello de hacer el sitio en el servidor de producción con una estructura domain.tld/wp o similar, y luego quiere moverlo a domain.tld

El soporte de su hosting y con razón le dirá que eso es una cuestión nuestra, y que no entra dentro del soporte, por lo que no nos ayudará o si lo hace, será bajao presupuesto. Normal, el trabajo no es gratis.

Cambios por ejemplo para domain.tld/wp a domain.tld

En principio basta con acceder via, phpMyAdmin, MysqlWorkbench, TablePlus o similar a la tabla xxx_options para modificar los valores de options_name de las filas site_url y home por nuetsro nuevo path domain.tld tal y como nos indica Wordpress en su documentación, Moving Worpdress

También deberemos eliminar o corregir, mejor dicho, la configuración de nuestro .htaccess que contendría el path /wp

Pero bueno, esto a veces no es suficiente y algo falla, ya que incluso podemos acceder a nuestro area de administracion o tablero, con el nuevo dominio, pero wordpress nos idnica un 4040 en el sitio cuando tratamos de acudir a la nueva ubicación.

Es probable que halla restos del path antiguo en nuetsros posts, o en algun sitio de nuestro template, etc.

wp search-replace

wp search-replace comando de wp cli que nos permitirá revisar la base de datos y corregir posibles problemas embutidos en nuestras tablas.

wp search-replace 'https://dominio.tld' 'https://dominio.tld'

Merece repasar las opciones como dry-run para no hacer cambios, o --export=database.sql que tampoco hace cambios pero exporta los cambios.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Wp Cli

Problemas por la versión shell usada y wp-cli (cPanel version)

Introducción

A veces podemos encontrarnos con un usuario con un Wordpress muy, muy obsoleto, y aunque tengamos la versión de PHP requerida en el shell, seguiremos teniendo problemas con wp cli porque este depende de la instalación de WP que tiene. La solución pasa por usar la versión php original

En cpanel es fácil hacer esto,

Aunque este tip es para cPanel, vale para cualquier distribución Linux o *nix. adaptando el tip a tu SO

Si buscas algo para Directadmin, te dejo aqu: PHP en shell para usar wp cli en DirectAdmin

Ejemplo

 wp core update && wp plugin upgrade --all && wp theme upgrade --all
Fatal error: __autoload() is no longer supported, use spl_autoload_register() instead in /home/user/public_html/wiki.dominio.com/wp-includes/compat.php on line 502

 php -v
PHP 7.2.34 (cli) (built: Mar 28 2023 21:20:00) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader + ionCube24 v10.4.5, Copyright (c) 2002-2020, by ionCube Ltd.
    with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies

El usuario tiene una versión correcta en la que todavía no estaba declarada obsoleta la función __autoload()

Así que vemos en el sistema que versiones hay y su path.

Como root podemos hacer

whmapi1 php_get_installed_versions
---
data:
  versions:
    - ea-php54
    - ea-php55
    - ea-php56
    - ea-php70
    - ea-php71
    - ea-php72
    - ea-php73
    - ea-php74
    - ea-php80
    - ea-php81
    - ea-php82
metadata:
  command: php_get_installed_versions
  reason: OK
  result: 1
  version: 1

Así que las versiones que tenemos están en /opt/cpanel/ea-phpXX/root/usr/bin/php

Ahora solo nos queda llamar al wp-cli de forma adecuada 72 es la versión que queremos usar /usr/local/bin/wp es el path de instalación global de la herramienta wp

/opt/cpanel/ea-php72/root/usr/bin/php /usr/local/bin/wp core update
Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Wp Cli

WP: Can't connect to local server through socket '/tmp/mysql.sock' pero funcionan otros comandos

Introducción

Este es un problema extraño que se produce en algunos escenarios, ya que en el lugar donde ejecutamos este comando, funcionan perfectamente otros comandos habituales de wp cli.

Sin embargo, hay excepciones y a veces saltan errores extraños.

Sistema con uso diferenciado de sockets

Al tratar de usar wp db en un sistema en el que hay alguna variación que no nos permite usarlo de la manera habitual, el usuario tiene en su wp-config.php los datos correctos y, siendo operativo el uso de wp en su directorio de instalación, obtenemos el siguiente error:

asociaci@srv120:~/domains/domain.com/public_html/portal$ wp db query "DELETE FROM wp_options WHERE option_name LIKE '_wp_session_%';"
Error: Failed to get current SQL modes. Reason: ERROR 2002 (HY000): Can't connect to local server through socket '/tmp/mysql.sock' (2)

Este caso es un caso típico con DirectAdmin con su peculiar sistema de instalación de MySQL/MariaDB.

La solución es sencilla

  1. Debemos obtener el path de mysql.sock correcto.
  2. Modificar el wp-config.phppara el valor 'DB_HOST';
define('DB_HOST', 'localhost:/usr/local/mysql/data/mysql.sock');

Es el path de socket de Mysql obtenido con alguno de los métodos del punto 1.

Ahora, ya puedes ejecutar el comando sin problema alguno

Este tipo de error, muchas veces limita el alcance de obtención de respuestas, pues muchas respuestas en internet estan asociadas a el servidor esta caido, comprueba tus datos,... que en realidad no tienen nada que ver.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Wp Cli

Forzar cambio de password pero conociendo el nuevo password de todos los usuarios

A veces es necesario un cambio global de Password, de ser administradores o de todos los usuarios, sobre todo cuando ha habido evidencias de un Explo o hacking un sitio web, algo que le cuesta mucho a muchos administradores, entender que es la seguridad.

WP Cli

Lista de usuarios

administradores

wp user list --role=administrator --fields=ID,user_login,user_email

todos los roles

wp user list --fields=ID,user_login,user_email

Cambio de todos los administrrdores

wp user list --role=administrator --field=ID | while read uid; do
  newpass=$(openssl rand -base64 12)
  wp user update $uid --user_pass="$newpass" --skip-email
  login=$(wp user get $uid --field=user_login)
  echo "$login : $newpass"
done
Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Plugins y sus cosas

A veces algunos plugins nos hacen la vida mejor, otras veces son un engorro.

Plugins y sus cosas

Wordfence y 2F2

Introducción Wordfence 2FA

Creía que era el único al que se le resistía el uso de 2F2 en Wordpress, hasta que descubrí que el culpable era Wordfence (yo pensaba que era nativo de Wordpress). La verdad es que ya van dos veces que lo intento activar y se me olvida que nunca me funciona, ni el código 2FA ni los códigos de backup

Así que cuando deja de funcionar y eres tú el único administrador de tu sitio wordpress, te toca deshabilitarlo.

Desactivación temporal del Wordfence (shell)

Desactivar Wordfence con wp cli

$ wp plugin deactivate wordfence
Plugin 'wordfence' deactivated.

Desactivar Wordfence vía SSh o FTP

Si no te funciona la desactivación vía wp cli Renombrar wp-content/plugins/wordfence a wp-content/plugins/wordfence_bak Acceder a tu wordpress Acceder a Wordfence > Login Security y desactivar Two Factor Authentication Volver a renombrar Wordfence wp-content/plugins/wordfence_bak a wp-content/plugins/wordfence

SSH

$ mv wp-content/plugins/wordfence a  wp-content/plugins/wordfence_bak
$ wp-content/plugins/wordfence_bak a  wp-content/plugins/wordfence

Agradecimientos

SOLVED: VIDEO: 2F2 Cannot Be Verified or VERIFICATION

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como esta, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Plugins y sus cosas

Formularios de contacto en WordPress: por qué no llegan a Gmail y cómo configurarlos bien

Si los mensajes del formulario de contacto de tu web no te llegan a una cuenta de Gmail, o llegan tarde o a spam, casi siempre es por la forma en que el formulario está configurado para enviar el correo. Esta guía explica por qué pasa y cómo dejarlo bien en los dos plugins más habituales: WPForms y Contact Form 7.

Por qué Gmail rechaza el correo del formulario

Muchos formularios vienen configurados, o se configuran por comodidad, para que el mensaje salga desde la dirección del visitante o desde una dirección de Gmail. Es decir, el servidor de tu web envía un correo que dice ser de alguien@gmail.com.

Gmail comprueba que quien envía un correo esté autorizado por el dominio que aparece como remitente. Tu servidor no está autorizado a enviar en nombre de gmail.com ni del dominio de tus visitantes, así que Gmail lo trata como una suplantación. Según el caso lo verás como:

A esto se suma el spam: un formulario sin protección recibe envíos automáticos de bots, y ese contenido hace que Gmail desconfíe todavía más del resto de correos de tu web.

La regla: tres campos, tres direcciones distintas

Campo Qué poner Ejemplo
De (From) Una dirección de tu propio dominio web@tudominio.es
Responder a (Reply-To) El correo que escribe el visitante en el formulario el campo «Email» del formulario
Para (To) Quien recibe los mensajes tu buzón, sea del dominio o de Gmail

Así el correo sale legítimamente desde tu dominio, y cuando pulsas «Responder» contestas directamente al visitante. No pierdes nada.

El nombre del remitente sí puede ser el del visitante: lo que importa es la dirección.

WPForms

Remitente

  1. Entra en WPForms → Todos los formularios y edita el formulario.
  2. Ve a Ajustes → Notificaciones.
  3. En Correo electrónico del remitente pon una dirección de tu dominio, por ejemplo web@tudominio.es. No dejes {admin_email} si el correo de administración de WordPress es de Gmail u otro proveedor.
  4. En Responder a selecciona, con el botón de etiquetas inteligentes, el campo Email del formulario.
  5. En Enviar a la dirección de correo pon el buzón donde quieres recibir los mensajes. Revisa que no sea un valor de ejemplo como @example.com.

Protección antispam

  1. En WPForms → Ajustes → CAPTCHA elige un proveedor (Cloudflare Turnstile, hCaptcha o reCAPTCHA) y pega sus claves. Las tres opciones son gratuitas.
  2. Edita el formulario y, en Ajustes → Protección y seguridad antispam, activa la protección antispam y el CAPTCHA.

Contact Form 7

Remitente y asunto

Edita el formulario en Contacto → Formularios de contacto y abre la pestaña Correo electrónico:

Contact Form 7 avisa en la parte superior del editor cuando detecta un problema de configuración en el correo: si ves ese aviso, revísalo.

Si tu web está en varios idiomas, repite la revisión en cada formulario: cada idioma suele tener el suyo.

Protección antispam

Comprueba que funciona

  1. Envía un mensaje de prueba desde el formulario usando una dirección tuya de Gmail como visitante.
  2. Confirma que llega al buzón de destino, y no a spam.
  3. Pulsa «Responder» y verifica que la respuesta va a la dirección que escribiste en el formulario.

Si tu dominio tiene el DNS fuera de nuestro servidor

Para que Gmail acepte la dirección web@tudominio.es, el registro SPF de tu dominio tiene que autorizar a nuestro servidor. Si el DNS lo gestionas en otro proveedor (tu registrador, Cloudflare, etc.), abre un ticket y te indicamos exactamente qué valor poner.

Tipos generales de Wordpress

Tipos generales de Wordpress

Gestion y configuración de la memoria en Wordpress

Introducción

En Wordpress salvo en contados escenarios podemos manejar el consumo de memoria desde la propia configuración de Wordpress y desde el sistema de aco¡uerdo a la instalación del sistema.

Wordpress wp-config.php

Existen dos variables o mejor dicho constantes que se cargan en tiempo de ejecación desde el fichero wp-config.php

/** Para aumentar la memoria en el front-end */
define( 'WP_MEMORY_LIMIT', '64M' );
/** Para aumentar la memoria en el dashboard */
define( 'WP_MAX_MEMORY_LIMIT', '256M' );

Sistema

Esto dependera del sistema usado, o mjeor dicho de la instalacion de PHP. Muchas veces veo informaciones que no son correctas pues notodos los sistemas tienen el mismo modelo.

Quien controla el consumo de memoria en PHP es el fichero php.ini pero como se puede manipular esto, mas hallá de ser el administrador del sistema varia.

memory_limit

Es la variable que gestiona en PHP el limite de memoria.

Bien podemos editarla en el php.ini global, o si nuestro hosting lo permite en el php.ini personalizado

memory_limit = 512M

Tambien podemos si esta permitido por el administrador modificarlo en el fichero .htaccess

php_value memory_limit 2048M

Incluso en en un etorno con PHP-FPM editando el fichero del pool.dde nuestro sitio con

php_admin_value[memory_limit] = 512M

Comprobación

Podemos hacerlo en el shell con

php -i | grep -i memory
Zend Memory Manager => enabled
memory_limit => 512M => 512M
suhosin.memory_limit => 0 => 0
Shared Memory Schemes => mmap

O podemos hacerlo con un fichero de información como por ejemplo info.php

<?php phpinfo();

No es conveniente dejarlo luego de verificar el cambio.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.

Tipos generales de Wordpress

Debug de Wordpress

Introducción

El gran desconocido para todo usuario de WordPress (y casi todos los softwares del mundo) es el modo debug, que permite identificar y conocer los problemas que podemos tener con dicho software.

Activar el modo debug en WordPress

Hay que acceder a la edición del archivo wp-config.php, ya sea a través de:

Una vez que podamos editarlo por el medio elegido, podemos realizar varias configuraciones.

WP_DEBUG

Podemos o no tener esta línea en el archivo.

Si está presente, significa que el modo debug estará activo, dependiendo del valor true o false.

// Habilita el modo WP_DEBUG
define('WP_DEBUG', false);

true significa que está activo, mientras que false indica que no lo está. Esta información puede parecer redundante, pero a veces es necesaria.

Otros valores

// Deshabilita la visualización de errores y advertencias
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

// Habilita el registro de debug en el archivo /wp-content/debug.log
define('WP_DEBUG_LOG', true);

// Utiliza versiones de desarrollo de los archivos JS y CSS de núcleo (solo necesario si estás modificando estos archivos)
define('SCRIPT_DEBUG', true);

Importante

Debes insertar esto ANTES de /* That's all, stop editing! Happy blogging. */ en el archivo wp-config.php.

Mas información en Debugging in WordPress

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.