Saltar al contenido Saltar a la barra lateral

Este hilo está resuelto. Aquí tienes una descripción del problema y la solución.

Problem:
Si estás experimentando un error fatal al importar productos de WooCommerce en varios idiomas a través de una API y tienes activado el plugin WPML String Translation, el problema puede estar relacionado con restricciones de open_basedir en tu servidor. El error se manifiesta después de que la importación se completa correctamente, indicando que el plugin intenta acceder a la raíz (/), lo cual no está permitido por las restricciones de open_basedir.
Solution:
1. Verifica si tu importador/API utiliza

set_error_handler()

o alguna librería que convierta E_WARNING en ErrorException. Si es así, intenta añadir una excepción para ignorar específicamente el warning de realpath(): open_basedir restriction in effect, o no convertirlo en excepción.
2. Añade una validación en el archivo

/wp-content/plugins/wpml-string-translation/classes/MO/LoadedMODictionary.php

en las líneas 62-64 para prevenir que se agregue la ruta inválida '/' al diccionario, lo cual evita el error fatal cuando WordPress intenta usar

realpath('/')

. Aquí está el código que puedes añadir:

public function addFile( $domain, $mofile ) {<br />    if ( ! $mofile || '/' === $mofile ) {<br />        return; // Rechaza rutas vacías o raíz<br />    }<br />    // ...<br />}

Si esta solución no resuelve el problema o si parece ser irrelevante debido a que está desactualizada o no se ajusta a tu caso, te recomendamos abrir un nuevo ticket de soporte. También es altamente recomendable que revises los problemas conocidos, verifiques la versión del arreglo permanente y confirmes que tienes instaladas las últimas versiones de los temas y plugins.

Este es el foro de soporte técnico de WPML, el plugin multilingüe de WordPress.

Todas las personas pueden leerlo pero solo los clientes de WPML pueden ingresar comentarios. El equipo de WPML responde en los foros 6 días a la semana, 22 horas por día.

Etiquetado: 

Este tema contiene 1 respuesta, tiene 0 voces.

Última actualización por antonioO-2 hace 1 mes, 4 semanas.

Asistido por: Otto.

Autor Publicaciones
enero 9, 2026 a las 18:34 #17717088

antonioO-2

Tengo un problema al importar mis productos de woocommerce en varios idiomas conectandome a una API.
La importación se realiza correctamente pero al acabar salta un error fatal debido al plugin WPML String Translation. Al desactivarlo, no salta el error.

En otro chat s eme indicó lo siguiente: "Te recomendamos pedir a tu proveedor de hosting que amplíe los permisos de open_basedir para incluir /var/"

Ya lo he hecho (puede verse en la traza de error), pero sigue dando error porque parece que el plugin intenta acceder a la raiz (/)
Adjunto la traza:
{
"status": "Importación finalizada",
"resultados": {
"es": {
"status": "ok"
},
"en": {
"status": "ok"
},
"fr": {
"status": "ok"
},
"de": {
"status": "ok"
}
}
}<br />
<b>Fatal error</b>: Uncaught ErrorException: realpath(): open_basedir restriction in effect. File(/) is not within the allowed path(s): (/var/www/vhosts/demosbluefish.es/:/tmp/:/var/) in /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n/class-wp-translation-controller.php: 106
Stack trace:
#0 [internal function
]: {closure
}()
#1 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n/class-wp-translation-controller.php(106): realpath()
#2 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n.php(849): WP_Translation_Controller->load_file()
#3 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/wpml-string-translation/classes/MO/JustInTime/MO.php(100): load_textdomain()
#4 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/collect/src/Illuminate/Support/Collection.php(228): WPML\ST\MO\JustInTime\MO->WPML\ST\MO\JustInTime\{closure
}()
#5 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/wpml-string-translation/classes/MO/JustInTime/MO.php(96): WPML\Collect\Support\Collection->each()
#6 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/wpml-string-translation/classes/MO/JustInTime/MO.php(78): WPML\ST\MO\JustInTime\MO->loadTextDomain()
#7 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/wpml-string-translation/classes/MO/JustInTime/MO.php(50): WPML\ST\MO\JustInTime\MO->load()
#8 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n.php(196): WPML\ST\MO\JustInTime\MO->translate()
#9 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n.php(307): translate()
#10 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-content/plugins/woocommerce/includes/class-wc-install.php(958): __()
#11 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/class-wp-hook.php(341): WC_Install: :cron_schedules()
#12 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/plugin.php(205): WP_Hook->apply_filters()
#13 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/cron.php(1139): apply_filters()
#14 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/cron.php(1037): wp_get_schedules()
#15 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/class-wp-hook.php(341): _wp_cron()
#16 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters()
#17 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/plugin.php(522): WP_Hook->do_action()
#18 /var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/load.php(1308): do_action()
#19 [internal function
]: shutdown_action_hook()
#20 {main
}
thrown in <b>/var/www/vhosts/demosbluefish.es/barrado.demosbluefish.es/wp-includes/l10n/class-wp-translation-controller.php</b> on line <b>106</b><br />

Gracias!

enero 9, 2026 a las 19:21 #17717205

Otto

Hola,

Hay varios conflictos reportados con open_basedir. En WPML 4.10 esperamos solucionarlos.

Mientras tanto, en tu caso, hay dos situaciones diferentes.

1.
El error es un ErrorException a partir de un warning de realpath(). En muchos sitios eso NO sería fatal; suele volverse fatal cuando algún código convierte warnings en excepciones durante el request/import.

Revisa en tu importador/API, si usa set_error_handler() o alguna librería que transforme E_WARNING en ErrorException.

Si es así, añade una excepción: ignorar específicamente el warning de realpath(): open_basedir restriction in effect (o, como mínimo, no convertirlo a excepción).

De este modo, el problema real no afectará la importación.

2.
El warning (causa real del problema) se origina en que WPML intenta cargar un archivo de traducción con la ruta / (raíz del sistema), lo cual viola las restricciones de open_basedir de tu servidor.

❌ Por favor, antes que nada: haz un backup de tu sitio ❌

Un posible workaround es agregar una validación en /wp-content/plugins/wpml-string-translation/classes/MO/LoadedMODictionary.php#L61-L64) líneas 62-64:

public function addFile( $domain, $mofile ) {
    if ( ! $mofile || '/' === $mofile ) {
        return; // Rechaza rutas vacías o raíz
    }
    // ...

Esto previene que se agregue la ruta inválida '/' al diccionario, evitando el error fatal cuando WordPress intenta usar realpath('/').

Dime si esto ayuda, por favor.

Saludos cordiales,
Otto

enero 12, 2026 a las 16:27 #17722523

antonioO-2

Perfecto Otto!

Cierto, estábamos añadiendo ese warning como un fatal error en el catch.

Gracias por tus indicaciones.

Un saludo!