Trasferir Sitio web de dominio a dominio

https://srmomo.com/migrar-wordpress/  

Manual proceso paos a paos para 

Migrar web de dominia www.A..com a www.ab.com  de wordpress

 

Paso 0: Preparativos previos

  1. Reducir TTL del DNS
    En tu panel de DNS (registrador o hosting), baja el TTL de los registros A/CNAME a un valor bajo (p.ej. 300 s) para que el cambio apunte rápido al nuevo servidor.

  2. Configurar hosting/dominio

  • Apunta www.ab.com al servidor destino (vía registro DNS registros  A y CNAME).

  • Si vas a usar el mismo hosting, crea un nuevo vHost o carpeta raíz (p.ej. /public_html/ab.com).

  • Si el destino es el mismo servidor de destino, debes crear una base de datos vacía con nombre diferente esto evitara que la base de datos del dominio A genere problema con la del B

SSL/TLS

  • Genera o importa tu certificado en el servidor (Let’s Encrypt, Cloudflare, etc.).



Paso 1 -  Realice copia de seguridad de todos los ficheros desde la carpeta Raiz  de la web en un archivo comprimido limpio

 

Paso 2 - Descargue una copia de la base de datos desde php admin completa de la base de datos, verifique que el peso sea el mismo de la base datos 

 

paso 3 - Suba los ficheros en el archivo zip al nuevo servidor y descomprima

 

Paso 4 - Cree la base de datos vacía, e importa todos los datos de la  base de datos del otro dominio cargue la base de datos. 

 

Nombre Bd:restacarto422

Nombre User: usecartoix676

Nombre contraseña: skh87jbs6



Paso 5 -   Actualice el archivo Abre tu wp-config.php en la carpeta clonada y cambia con los datos reales:

 

Prefijo tablas: 

 

Paso 6 - actualice todas las url de la  base de datos  de  www.A..com a www.ab.com 

 

desde la consola de phpmyadmin ejecute el siguiente comando remplazo las urls reales: 

 

reuiqere prefijo de la base de datos:

Nombre del abase de datos 

dominio A:

Dominio B: 



-- 1) Home y Site URL

UPDATE `f6Z3ytzL_options`

SET `option_value` = REPLACE(

    `option_value`,

    'https://lacartoixacomidasparallevar.es',

    'https://restaurantelacartoixa.es'

)

WHERE `option_name` IN ('home','siteurl');

 

-- 2) Contenido de posts/páginas

UPDATE `f6Z3ytzL_posts`

SET `post_content` = REPLACE(

    `post_content`,

    'https://lacartoixacomidasparallevar.es',

    'https://restaurantelacartoixa.es'

);

 

-- 3) Metadatos de posts (ACF, campos personalizados…)

UPDATE `f6Z3ytzL_postmeta`

SET `meta_value` = REPLACE(

    `meta_value`,

    'https://lacartoixacomidasparallevar.es',

    'https://restaurantelacartoixa.es'

);

 

-- 4) Metadatos de usuarios (si hay URLs en perfiles u otros campos)

UPDATE `f6Z3ytzL_usermeta`

SET `meta_value` = REPLACE(

    `meta_value`,

    'https://lacartoixacomidasparallevar.es',

    'https://restaurantelacartoixa.es'

);

 

-- 5) Tabla de enlaces (opcional si usas el gestor de enlaces de WP)

UPDATE `f6Z3ytzL_links`

SET `link_url` = REPLACE(

    `link_url`,

    'https://lacartoixacomidasparallevar.es',

    'https://restaurantelacartoixa.es'

);





paso dos del 6: buscar registros de la url antigua:  



SELECT 'options'    AS tabla, COUNT(*) AS restos

  FROM `f6Z3ytzL_options`

 WHERE `option_value` LIKE '%lacartoixacomidasparallevar.es%';

 

SELECT 'posts'      AS tabla, COUNT(*) AS restos

  FROM `f6Z3ytzL_posts`

 WHERE `post_content` LIKE '%lacartoixacomidasparallevar.es%';

 

SELECT 'postmeta'   AS tabla, COUNT(*) AS restos

  FROM `f6Z3ytzL_postmeta`

 WHERE `meta_value` LIKE '%lacartoixacomidasparallevar.es%';

 

SELECT 'usermeta'   AS tabla, COUNT(*) AS restos

  FROM `f6Z3ytzL_usermeta`

 WHERE `meta_value` LIKE '%lacartoixacomidasparallevar.es%';

 

SELECT 'links'      AS tabla, COUNT(*) AS restos

  FROM `f6Z3ytzL_links`

 WHERE `link_url` LIKE '%lacartoixacomidasparallevar.es%';





Paso 7 -  Actualice el archivo Abre tu wp-config.php en la carpeta clonada y cambia:

 

Paso 8 : Regenerar permalinks

 

wp rewrite flush

 

    Esto fuerza a WordPress a limpiar y reconstruir sus reglas de reescritura, evitando 404 en tus permalinks.

 

Paso 9: Limpiar caché de objeto 

 

wp cache flush

 

Útil si usas un object cache (Memcached, Redis). Para plugins de caché tipo WP Rocket u otros, usa su propio comando CLI o vacía manualmente.



Paso 10: Actualizar los valores de PHP 

 

memory_limit =

WP_MAX_MEMORY_LIMIT=

 

Paso 11:  DNS y TTL (si toca)

 

    Cambia los registros A/CNAME de www.A.com al servidor nuevo.

 

    Gracias al Dry-Run previo y al TTL bajo, el impacto será mínimo.

 

    Cuando todo esté OK, sube de nuevo el TTL a un valor normal (p.ej. 3600 s).



Paso 11: consulte la pagina web Consulte la pagina web



Paso 12: Verificar el sitio

Accede a www.ab.com, revisa navegación, enlaces, formularios, imágenes y realiza pruebas completas de funcionamiento.



UPDATE index_options SET option_value = REPLACE ( option_value, 'https://essenzanatura.es', 'https://antigua.essenzanatura.es' );
 
UPDATE index_posts SET guid = REPLACE ( guid, 'https://essenzanatura.es', 'https://antigua.essenzanatura.es' );
 
UPDATE index_posts SET post_content = REPLACE ( post_content, 'https://essenzanatura.es', 'https://antigua.essenzanatura.es' );
 
UPDATE index_postmeta SET meta_value = REPLACE ( meta_value, 'https://essenzanatura.es', 'https://

antigua.essenzanatura.es' );

UPDATE 7eH7jyl4n_options
SET option_value = REPLACE(
    option_value,
    'seguroscifresapena.es',
    'valenciaseguroscifresapena.es'
);

UPDATE 7eH7jyl4n_posts
SET post_content = REPLACE(
    post_content,
    'seguroscifresapena.es',
    'valenciaseguroscifresapena.es'
);

UPDATE 7eH7jyl4n_postmeta
SET meta_value = REPLACE(
    meta_value,
    'seguroscifresapena.es',
    'valenciaseguroscifresapena.es'
);

Comprobar que no quedan URLs antiguas

SELECT 'options' AS tabla, COUNT(*) AS restos FROM 7eH7jyl4n_options WHERE option_value LIKE '%seguroscifresapena.es%';
SELECT 'posts' AS tabla, COUNT(*) AS restos FROM 7eH7jyl4n_posts WHERE post_content LIKE '%seguroscifresapena.es%';
SELECT 'postmeta' AS tabla, COUNT(*) AS restos FROM 7eH7jyl4n_postmeta WHERE meta_value LIKE '%seguroscifresapena.es%';
SELECT 'usermeta' AS tabla, COUNT(*) AS restos FROM 7eH7jyl4n_usermeta WHERE meta_value LIKE '%seguroscifresapena.es%';
SELECT 'links' AS tabla, COUNT(*) AS restos FROM 7eH7jyl4n_links WHERE link_url LIKE '%seguroscifresapena.es%';

-----

siemore se neceita confirmar el nombde de la bae de dtaos y el prefijo para ejeuctar el borrado 

borrar entradas

START TRANSACTION;


/* =========================================================
   1. GUARDAR ENTRADAS Y PÁGINA DEL BLOG
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_blog_principales`;

CREATE TEMPORARY TABLE `tmp_blog_principales` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_blog_principales` (`ID`)
SELECT `ID`
FROM `index_posts`
WHERE `post_type` = 'post';

INSERT IGNORE INTO `tmp_blog_principales` (`ID`)
SELECT CAST(`option_value` AS UNSIGNED)
FROM `index_options`
WHERE `option_name` = 'page_for_posts'
  AND CAST(`option_value` AS UNSIGNED) > 0;


/* =========================================================
   2. INCLUIR REVISIONES Y AUTOGUARDADOS
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_blog_eliminar`;

CREATE TEMPORARY TABLE `tmp_blog_eliminar` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_blog_eliminar` (`ID`)
SELECT `ID`
FROM `tmp_blog_principales`;

INSERT IGNORE INTO `tmp_blog_eliminar` (`ID`)
SELECT p.`ID`
FROM `index_posts` AS p
INNER JOIN `tmp_blog_principales` AS principal
    ON principal.`ID` = p.`post_parent`
WHERE p.`post_type` = 'revision';


/* =========================================================
   3. DESVINCULAR IMÁGENES SIN BORRARLAS
   ========================================================= */

UPDATE `index_posts` AS imagen
INNER JOIN `tmp_blog_principales` AS principal
    ON principal.`ID` = imagen.`post_parent`
SET imagen.`post_parent` = 0
WHERE imagen.`post_type` = 'attachment';


/* =========================================================
   4. BORRAR METADATOS DE COMENTARIOS
   ========================================================= */

DELETE cm
FROM `index_commentmeta` AS cm
INNER JOIN `index_comments` AS c
    ON c.`comment_ID` = cm.`comment_id`
INNER JOIN `tmp_blog_eliminar` AS eliminar
    ON eliminar.`ID` = c.`comment_post_ID`;


/* =========================================================
   5. BORRAR COMENTARIOS
   ========================================================= */

DELETE c
FROM `index_comments` AS c
INNER JOIN `tmp_blog_eliminar` AS eliminar
    ON eliminar.`ID` = c.`comment_post_ID`;


/* =========================================================
   6. BORRAR RELACIONES CON CATEGORÍAS Y ETIQUETAS
   ========================================================= */

DELETE relacion
FROM `index_term_relationships` AS relacion
INNER JOIN `tmp_blog_eliminar` AS eliminar
    ON eliminar.`ID` = relacion.`object_id`;


/* =========================================================
   7. BORRAR METADATOS
   ========================================================= */

DELETE meta
FROM `index_postmeta` AS meta
INNER JOIN `tmp_blog_eliminar` AS eliminar
    ON eliminar.`ID` = meta.`post_id`;


/* =========================================================
   8. BORRAR ENTRADAS, PÁGINA DEL BLOG Y REVISIONES
   ========================================================= */

DELETE contenido
FROM `index_posts` AS contenido
INNER JOIN `tmp_blog_eliminar` AS eliminar
    ON eliminar.`ID` = contenido.`ID`;


/* =========================================================
   9. QUITAR CONFIGURACIÓN DE PÁGINA DE ENTRADAS
   ========================================================= */

UPDATE `index_options`
SET `option_value` = '0'
WHERE `option_name` = 'page_for_posts';


/* =========================================================
   10. ACTUALIZAR CONTADORES DE CATEGORÍAS Y ETIQUETAS
   ========================================================= */

UPDATE `index_term_taxonomy` AS tt
SET tt.`count` = (
    SELECT COUNT(*)
    FROM `index_term_relationships` AS tr
    WHERE tr.`term_taxonomy_id` = tt.`term_taxonomy_id`
)
WHERE tt.`taxonomy` IN ('category', 'post_tag');


DROP TEMPORARY TABLE IF EXISTS `tmp_blog_eliminar`;
DROP TEMPORARY TABLE IF EXISTS `tmp_blog_principales`;

COMMIT;

verificar 

SELECT COUNT(*) AS entradas_restantes
FROM `index_posts`
WHERE `post_type` = 'post';

SELECT
    option_name,
    option_value
FROM `index_options`
WHERE `option_name` = 'page_for_posts';

--------

elimnar clientes 

USE `openlor_2342es`;

START TRANSACTION;


/* =========================================================
   1. IDENTIFICAR ADMINISTRADORES
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_admin_ids`;

CREATE TEMPORARY TABLE `tmp_admin_ids` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_admin_ids` (`ID`)
SELECT DISTINCT u.`ID`
FROM `index_users` AS u
INNER JOIN `index_usermeta` AS um
    ON um.`user_id` = u.`ID`
WHERE um.`meta_key` = 'index_capabilities'
  AND um.`meta_value` LIKE '%"administrator"%';


/* Administrador usado para reasignar páginas y contenidos */
SET @admin_id = (
    SELECT MIN(`ID`)
    FROM `tmp_admin_ids`
);

SET @permitir_borrado = IF(@admin_id IS NULL, 0, 1);

SELECT
    @admin_id AS administrador_conservado,
    @permitir_borrado AS borrado_autorizado;


/* =========================================================
   2. IDENTIFICAR USUARIOS NO ADMINISTRADORES
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_usuarios_eliminar`;

CREATE TEMPORARY TABLE `tmp_usuarios_eliminar` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_usuarios_eliminar` (`ID`)
SELECT u.`ID`
FROM `index_users` AS u
LEFT JOIN `tmp_admin_ids` AS administrador
    ON administrador.`ID` = u.`ID`
WHERE administrador.`ID` IS NULL
  AND @permitir_borrado = 1;


/* =========================================================
   3. IDENTIFICAR PEDIDOS CLÁSICOS
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_pedidos`;

CREATE TEMPORARY TABLE `tmp_pedidos` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_pedidos` (`ID`)
SELECT `ID`
FROM `index_posts`
WHERE `post_type` IN (
    'shop_order',
    'shop_order_refund',
    'shop_subscription',
    'shop_order_placehold'
)
AND @permitir_borrado = 1;


/* =========================================================
   4. IDENTIFICAR NOTAS Y COMENTARIOS QUE SE ELIMINARÁN
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_comentarios_eliminar`;

CREATE TEMPORARY TABLE `tmp_comentarios_eliminar` (
    `comment_ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_comentarios_eliminar` (`comment_ID`)
SELECT c.`comment_ID`
FROM `index_comments` AS c
LEFT JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = c.`comment_post_ID`
LEFT JOIN `tmp_usuarios_eliminar` AS usuario
    ON usuario.`ID` = c.`user_id`
WHERE (
       pedido.`ID` IS NOT NULL
       OR usuario.`ID` IS NOT NULL
       OR c.`comment_type` = 'order_note'
)
AND @permitir_borrado = 1;


/* =========================================================
   5. BORRAR METADATOS DE COMENTARIOS Y NOTAS
   ========================================================= */

DELETE cm
FROM `index_commentmeta` AS cm
INNER JOIN `tmp_comentarios_eliminar` AS eliminar
    ON eliminar.`comment_ID` = cm.`comment_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   6. BORRAR COMENTARIOS Y NOTAS DE PEDIDOS
   ========================================================= */

DELETE c
FROM `index_comments` AS c
INNER JOIN `tmp_comentarios_eliminar` AS eliminar
    ON eliminar.`comment_ID` = c.`comment_ID`
WHERE @permitir_borrado = 1;


/* =========================================================
   7. BORRAR METADATOS DE ARTÍCULOS DE PEDIDO
   ========================================================= */

DELETE itemmeta
FROM `index_woocommerce_order_itemmeta` AS itemmeta
INNER JOIN `index_woocommerce_order_items` AS item
    ON item.`order_item_id` = itemmeta.`order_item_id`
INNER JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = item.`order_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   8. BORRAR ARTÍCULOS DE PEDIDOS
   ========================================================= */

DELETE item
FROM `index_woocommerce_order_items` AS item
INNER JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = item.`order_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   9. BORRAR RELACIONES DE PEDIDOS
   ========================================================= */

DELETE relacion
FROM `index_term_relationships` AS relacion
INNER JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = relacion.`object_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   10. BORRAR METADATOS DE PEDIDOS CLÁSICOS
   ========================================================= */

DELETE meta
FROM `index_postmeta` AS meta
INNER JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = meta.`post_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   11. BORRAR PEDIDOS CLÁSICOS
   ========================================================= */

DELETE contenido
FROM `index_posts` AS contenido
INNER JOIN `tmp_pedidos` AS pedido
    ON pedido.`ID` = contenido.`ID`
WHERE @permitir_borrado = 1;


/* =========================================================
   12. REASIGNAR PÁGINAS Y CONTENIDOS AL ADMINISTRADOR
   ========================================================= */

UPDATE `index_posts` AS contenido
INNER JOIN `tmp_usuarios_eliminar` AS usuario
    ON usuario.`ID` = contenido.`post_author`
SET contenido.`post_author` = @admin_id
WHERE @permitir_borrado = 1;


/* =========================================================
   13. BORRAR CLAVES API DE USUARIOS ELIMINADOS
   ========================================================= */

DELETE clave
FROM `index_woocommerce_api_keys` AS clave
INNER JOIN `tmp_usuarios_eliminar` AS usuario
    ON usuario.`ID` = clave.`user_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   14. BORRAR METADATOS DE USUARIOS NO ADMIN
   ========================================================= */

DELETE meta
FROM `index_usermeta` AS meta
INNER JOIN `tmp_usuarios_eliminar` AS usuario
    ON usuario.`ID` = meta.`user_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   15. BORRAR USUARIOS NO ADMINISTRADORES
   ========================================================= */

DELETE usuario
FROM `index_users` AS usuario
INNER JOIN `tmp_usuarios_eliminar` AS eliminar
    ON eliminar.`ID` = usuario.`ID`
WHERE @permitir_borrado = 1;


/* =========================================================
   16. LIMPIAR DATOS COMERCIALES DE LOS ADMINISTRADORES
   Conserva sus cuentas y permisos
   ========================================================= */

DELETE meta
FROM `index_usermeta` AS meta
INNER JOIN `tmp_admin_ids` AS administrador
    ON administrador.`ID` = meta.`user_id`
WHERE @permitir_borrado = 1
  AND (
       LEFT(meta.`meta_key`, 8) = 'billing_'
       OR LEFT(meta.`meta_key`, 9) = 'shipping_'
       OR LEFT(meta.`meta_key`, 29) =
          '_woocommerce_persistent_cart_'
       OR meta.`meta_key` IN (
           'paying_customer',
           'wc_last_active'
       )
  );


/* =========================================================
   17. LIMPIAR DATOS GENERALES DE CLIENTES
   ========================================================= */

DELETE FROM `index_woocommerce_payment_tokenmeta`
WHERE @permitir_borrado = 1;

DELETE FROM `index_woocommerce_payment_tokens`
WHERE @permitir_borrado = 1;

DELETE FROM `index_wc_download_log`
WHERE @permitir_borrado = 1;

DELETE FROM `index_woocommerce_downloadable_product_permissions`
WHERE @permitir_borrado = 1;

DELETE FROM `index_woocommerce_sessions`
WHERE @permitir_borrado = 1;

DELETE FROM `index_wc_customer_lookup`
WHERE @permitir_borrado = 1;

DELETE FROM `index_wc_reserved_stock`
WHERE @permitir_borrado = 1;


/* =========================================================
   18. FINALIZAR
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_comentarios_eliminar`;
DROP TEMPORARY TABLE IF EXISTS `tmp_pedidos`;
DROP TEMPORARY TABLE IF EXISTS `tmp_usuarios_eliminar`;
DROP TEMPORARY TABLE IF EXISTS `tmp_admin_ids`;

COMMIT;

-----------------

eliminar cupones 

USE `openlor_2342es`;

START TRANSACTION;


/* Guardar los cupones que se eliminarán */
DROP TEMPORARY TABLE IF EXISTS `tmp_cupones`;

CREATE TEMPORARY TABLE `tmp_cupones` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_cupones` (`ID`)
SELECT `ID`
FROM `index_posts`
WHERE `post_type` = 'shop_coupon';


/* Incluir revisiones de los cupones */
DROP TEMPORARY TABLE IF EXISTS `tmp_cupones_eliminar`;

CREATE TEMPORARY TABLE `tmp_cupones_eliminar` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_cupones_eliminar` (`ID`)
SELECT `ID`
FROM `tmp_cupones`;

INSERT IGNORE INTO `tmp_cupones_eliminar` (`ID`)
SELECT revision.`ID`
FROM `index_posts` AS revision
INNER JOIN `tmp_cupones` AS cupon
    ON cupon.`ID` = revision.`post_parent`
WHERE revision.`post_type` = 'revision';


/* Eliminar metadatos de comentarios asociados */
DELETE cm
FROM `index_commentmeta` AS cm
INNER JOIN `index_comments` AS c
    ON c.`comment_ID` = cm.`comment_id`
INNER JOIN `tmp_cupones_eliminar` AS eliminar
    ON eliminar.`ID` = c.`comment_post_ID`;


/* Eliminar comentarios asociados */
DELETE c
FROM `index_comments` AS c
INNER JOIN `tmp_cupones_eliminar` AS eliminar
    ON eliminar.`ID` = c.`comment_post_ID`;


/* Eliminar relaciones con taxonomías */
DELETE tr
FROM `index_term_relationships` AS tr
INNER JOIN `tmp_cupones_eliminar` AS eliminar
    ON eliminar.`ID` = tr.`object_id`;


/* Eliminar configuración y metadatos de cupones */
DELETE pm
FROM `index_postmeta` AS pm
INNER JOIN `tmp_cupones_eliminar` AS eliminar
    ON eliminar.`ID` = pm.`post_id`;


/* Eliminar cupones y revisiones */
DELETE p
FROM `index_posts` AS p
INNER JOIN `tmp_cupones_eliminar` AS eliminar
    ON eliminar.`ID` = p.`ID`;


/* Eliminar tablas temporales */
DROP TEMPORARY TABLE IF EXISTS `tmp_cupones_eliminar`;
DROP TEMPORARY TABLE IF EXISTS `tmp_cupones`;

COMMIT;

--------------------

eliminar clientes 

USE `openlor_2342es`;

START TRANSACTION;


/* =========================================================
   1. IDENTIFICAR ADMINISTRADORES
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_admin_ids`;

CREATE TEMPORARY TABLE `tmp_admin_ids` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_admin_ids` (`ID`)
SELECT DISTINCT u.`ID`
FROM `index_users` AS u
INNER JOIN `index_usermeta` AS um
    ON um.`user_id` = u.`ID`
WHERE um.`meta_key` = 'index_capabilities'
  AND um.`meta_value` LIKE '%"administrator"%';


/* Confirmar que openlor_3523 es administrador */
SET @admin_principal = (
    SELECT u.`ID`
    FROM `index_users` AS u
    INNER JOIN `tmp_admin_ids` AS admin
        ON admin.`ID` = u.`ID`
    WHERE u.`user_login` = 'openlor_3523'
    LIMIT 1
);

SET @permitir_borrado =
    IF(@admin_principal IS NULL, 0, 1);

SELECT
    @admin_principal AS admin_reasignacion,
    @permitir_borrado AS borrado_autorizado;


/* =========================================================
   2. IDENTIFICAR USUARIOS NO ADMINISTRADORES
   ========================================================= */

DROP TEMPORARY TABLE IF EXISTS `tmp_clientes_eliminar`;

CREATE TEMPORARY TABLE `tmp_clientes_eliminar` (
    `ID` BIGINT UNSIGNED NOT NULL PRIMARY KEY
);

INSERT IGNORE INTO `tmp_clientes_eliminar` (`ID`)
SELECT u.`ID`
FROM `index_users` AS u
LEFT JOIN `tmp_admin_ids` AS admin
    ON admin.`ID` = u.`ID`
WHERE admin.`ID` IS NULL
  AND @permitir_borrado = 1;


/* Mostrar cantidad seleccionada */
SELECT COUNT(*) AS usuarios_a_eliminar
FROM `tmp_clientes_eliminar`;


/* =========================================================
   3. REASIGNAR PÁGINAS Y CONTENIDOS
   ========================================================= */

UPDATE `index_posts` AS contenido
INNER JOIN `tmp_clientes_eliminar` AS usuario
    ON usuario.`ID` = contenido.`post_author`
SET contenido.`post_author` = @admin_principal
WHERE @permitir_borrado = 1;


/* =========================================================
   4. BORRAR COMENTARIOS DE ESOS USUARIOS
   ========================================================= */

DELETE cm
FROM `index_commentmeta` AS cm
INNER JOIN `index_comments` AS comentario
    ON comentario.`comment_ID` = cm.`comment_id`
INNER JOIN `tmp_clientes_eliminar` AS usuario
    ON usuario.`ID` = comentario.`user_id`
WHERE @permitir_borrado = 1;

DELETE comentario
FROM `index_comments` AS comentario
INNER JOIN `tmp_clientes_eliminar` AS usuario
    ON usuario.`ID` = comentario.`user_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   5. BORRAR METADATOS DE USUARIOS
   Direcciones, preferencias, roles, carritos, etc.
   ========================================================= */

DELETE meta
FROM `index_usermeta` AS meta
INNER JOIN `tmp_clientes_eliminar` AS usuario
    ON usuario.`ID` = meta.`user_id`
WHERE @permitir_borrado = 1;


/* =========================================================
   6. BORRAR CUENTAS NO ADMINISTRADORAS
   ========================================================= */

DELETE usuario
FROM `index_users` AS usuario
INNER JOIN `tmp_clientes_eliminar` AS eliminar
    ON eliminar.`ID` = usuario.`ID`
WHERE @permitir_borrado = 1;


/* =========================================================
   7. LIMPIAR DATOS COMERCIALES DE LOS ADMINISTRADORES
   Conserva sus cuentas, contraseña y permisos
   ========================================================= */

DELETE meta
FROM `index_usermeta` AS meta
INNER JOIN `tmp_admin_ids` AS admin
    ON admin.`ID` = meta.`user_id`
WHERE @permitir_borrado = 1
  AND (
       meta.`meta_key` LIKE 'billing\_%'
       OR meta.`meta_key` LIKE 'shipping\_%'
       OR meta.`meta_key` LIKE '_woocommerce_persistent_cart\_%'
       OR meta.`meta_key` IN (
           'paying_customer',
           'wc_last_active'
       )
  );


DROP TEMPORARY TABLE IF EXISTS `tmp_clientes_eliminar`;
DROP TEMPORARY TABLE IF EXISTS `tmp_admin_ids`;

COMMIT;

----------------

DELETE FROM `index_woocommerce_payment_tokenmeta`;

DELETE FROM `index_woocommerce_payment_tokens`;

DELETE FROM `index_woocommerce_downloadable_product_permissions`;

DELETE FROM `index_wc_download_log`;

DELETE FROM `index_woocommerce_sessions`;

DELETE FROM `index_wc_customer_lookup`;

DELETE FROM `index_wc_reserved_stock`;

----

DELETE api
FROM `index_woocommerce_api_keys` AS api
LEFT JOIN `index_users` AS usuario
    ON usuario.`ID` = api.`user_id`
WHERE usuario.`ID` IS NULL;

-------

UPDATE `index_users`
SET
    `user_login` = 'openlor_3523',
    `user_nicename` = 'openlor-3523',
    `user_email` = 'tienda@openlor.es',
    `display_name` = 'Openlor',
    `user_url` = 'https://openlor.es'
WHERE `user_login` = 'essenzanatura_us';

_____

¿Le ha resultado útil este artículo?