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
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.
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 />
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('/').