Ir al contenido Ir a la barra lateral

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 4 respuestas, tiene 2 voces.

Última actualización por Carlos Rojas hace 1 año, 5 meses.

Asistido por: Carlos Rojas.

Autor Publicaciones
febrero 24, 2024 a las 1:12 pm #15340379

David Girona

Error al acceder a la opción de escanear plugins y temas

Mirando los logs de server se puede ver como el error lo está dando el propio plugin.

2024-02-24 13:50:30 Error 88.21.113.129 500 GET /wp-admin/admin.php?page=sitepress-multilingual-cms/menu/theme-localization.php HTTP/1.0

2024-02-24 13:50:31 Error 88.21.113.129 AH01071: Got error 'PHP message: PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /var/www/vhosts/savarca.com/httpdocs/wp-content/plugins/wpml-string-translation/inc/functions.php:148\nStack trace:\n#0 /var/www/vhosts/savarca.com/httpdocs/wp-content/plugins/wpml-string-translation/inc/wpml-string-translation.class.php(865): wpml_st_init_register_widget_titles()\n#1 /var/www/vhosts/savarca.com/httpdocs/wp-content/plugins/wpml-string-translation/classes/actions/class-wpml-st-wp-loaded-action.php(29): WPML_String_Translation->initialize_wp_and_widget_strings()\n#2 /var/www/vhosts/savarca.com/httpdocs/wp-content/plugins/wpml-string-translation/inc/private-actions.php(44): WPML_ST_WP_Loaded_Action->run()\n#3 /var/www/vhosts/savarca.com/httpdocs/wp-includes/class-wp-hook.php(324): wpml_st_initialize_basic_strings('')\n#4 /var/www/vhosts/savarca.com/httpdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters(NULL, Array)\n#5 /var/www/vhosts/savarca.com/httpdocs/wp-includes/plugin.php(5...', referer: enlace oculto

Información
PHP

Versión 8.1.23
Límite de memoria 512M
Uso de memoria 163.10 MB
Tiempo de ejecución máximo 18000
Vars de entrada máx. 50000
Conjunto de caracteres Utf8mb4 Sí
Extensión SimpleXML Cargado
Extensión Multibyte String Cargado

WordPress
Versión 6.4.3
Multisitio No
Límite de memoria 512M
Límite de memoria máximo 512M
REST activado Sí

Tengo instaladas las últimas versiones de WPML.

febrero 24, 2024 a las 5:26 pm #15340768

David Girona

Efectivamente he podido confirmar que se trata de un BUG.
Añadiendo una corrección / condicional para verificar que $value[$suffix] es un array antes de intentar acceder a 'title' se soluciona.

// Verificar si $value[$suffix] es un array antes de intentar acceder a 'title'

if ( isset( $value[ $suffix ] ) && is_array( $value[ $suffix ] ) ) {
...
}

Archivo functions /var/www/vhosts/savarca.com/httpdocs/wp-content/plugins/wpml-string-translation/inc/functions.php:148

Función completa:

function wpml_st_init_register_widget_titles() {

// create a list of active widgets
$active_widgets = array();
$widgets = (array) get_option( 'sidebars_widgets' );

foreach ( $widgets as $k => $w ) {
if ( 'wp_inactive_widgets' != $k && $k != 'array_version' ) {
if ( is_array( $widgets[ $k ] ) ) {
foreach ( $widgets[ $k ] as $v ) {
$active_widgets[] = $v;
}
}
}
}
foreach ( $active_widgets as $aw ) {
$int = preg_match( '#-([0-9]+)$#i', $aw, $matches );
if ( $int ) {
$suffix = $matches[1];
} else {
$suffix = 1;
}
$name = preg_replace( '#-[0-9]+#', '', $aw );

$value = get_option( 'widget_' . $name );

// Verificar si $value[$suffix] es un array antes de intentar acceder a 'title'
if ( isset( $value[ $suffix ] ) && is_array( $value[ $suffix ] ) ) {

if ( isset( $value[ $suffix ]['title'] ) && $value[ $suffix ]['title'] ) {
$w_title = $value[ $suffix ]['title'];
} else {
$w_title = wpml_get_default_widget_title( $aw );
$value[ $suffix ]['title'] = $w_title;
update_option( 'widget_' . $name, $value );
}

if ( $w_title ) {
icl_register_string( WPML_ST_WIDGET_STRING_DOMAIN, 'widget title - ' . md5( $w_title ), $w_title );
}

}
}
}

Confirmar este bug por favor, de momento lo dejo parcheado a la espera de confirmación para poder seguir usando el módulo.

febrero 26, 2024 a las 10:32 am #15343503

Carlos Rojas
Partidario de WPML desde 03/2017

Idiomas: Inglés (English ) Español (Español )

Zona horaria: Europe/Madrid (GMT+02:00)

Hola,
Muchas gracias por contactarnos

Este error no debería aparecer en primer lugar, por lo que sospecho que pueda existir un conflicto con una funcionalidad de terceros o que los archivos del plugin de WPML no han sido actualizados correctamente.

Por favor realice los siguientes pasos:
- Cree una copia de seguridad del sitio completo o cree un sitio staging con una copia del sitio en producción
- Actualice cualquier plugin o tema que pueda estar desactualizado
- Borre cualquier memoria cache que pueda existir
- Desactive todos los plugins, incluyendo los de WPML
- Active un tema por defecto de WordPress, por ejemplo: Twenty Twenty
- Active los plugins de WPML
- Si el problema desapareció, comience activando el tema y luego el resto de los plugins, uno por uno, hasta que el problema vuelva a aparecer y encuentre al culpable

Puede decirme el resultado de los pasos anteriores?

Saludos,
Carlos

febrero 26, 2024 a las 11:11 am #15343691

David Girona

Hola Carlos,
El error que os pasé es claro, el error se produce dentro de uno de los archivos de php de wpml.
La solución genérica que me estas proponiendo no tiene ningún sentido.
Tenéis un bug.
De momento lo he parcheado yo mismo, pero quiero la confirmación de este bug por favor.

febrero 26, 2024 a las 11:22 am #15343745

Carlos Rojas
Partidario de WPML desde 03/2017

Idiomas: Inglés (English ) Español (Español )

Zona horaria: Europe/Madrid (GMT+02:00)

Hola,
Comprendo perfectamente su mensaje, sin embargo tenemos millones de sitios con WPML instalado y este error no aparece. Por lo que sospecho que la causa del problema puede que no esté en los archivos de WPML, sino en el ambiente de su sitio en específico.

Las pruebas que indiqué son simplemente para descartar que exista otra causa que esté generando este error.

Si pudiera crear un sitio staging y realizar las pruebas y compartir las credenciales (he establecido su próximo mensaje como privado) y autorizarnos a realizar las pruebas sería ideal.

De otra parte, puedo crear un sitio de pruebas con una nueva instalación de WordPress + WPML y puede comprobar que el problema no aparece.

Qued a la espera de su mensaje.