WPML
Estado
Abierto
Notificado para
WPML Multilingual CMS 4.7.6

Resumen del problema

Al usar WPML en un sitio con un prefijo de base de datos personalizado (distinto del predeterminado «wp_») y 30 o más idiomas, es posible que experimente un error de base de datos al visitar el escritorio de traducción.

Esto ocurre debido a un prefijo de base de datos fijo en el código del plugin WPML.

Solución alternativa

Asegúrese de tener una copia de seguridad completa de su sitio antes de continuar.

Abra:

/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/src/Infrastructure/WordPress/Component/Item/Application/Query/SearchQuery/QueryBuilder/ManyLanguagesStrategy/SearchQueryBuilder.php

Busque:

LEFT JOIN wp_icl_translations target_t
   ON target_t.trid = source_t.trid
       AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
LEFT JOIN wp_icl_translation_status target_ts
   ON target_ts.translation_id = target_t.translation_id

Reemplace con:

LEFT JOIN {$this->queryPrepare->prefix()}icl_translations target_t
   ON target_t.trid = source_t.trid
       AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
LEFT JOIN {$this->queryPrepare->prefix()}icl_translation_status target_ts
   ON target_ts.translation_id = target_t.translation_id

Este cambio garantiza que la consulta utilice el prefijo personalizado correcto en lugar del wp_ fijo en el código.

Otro lugar es en:

/wp-content/plugins/sitepress-multilingual-cms/vendor/wpml/wpml/src/Infrastructure/WordPress/Component/Item/Application/Query/SearchQuery/QueryBuilder/ManyLanguagesStrategy/SearchPopulatedTypesQueryBuilder.php

Busque:
      LEFT JOIN wp_icl_translations target_t
         ON target_t.trid = source_t.trid
             AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
       LEFT JOIN wp_icl_translation_status target_ts
         ON target_ts.translation_id = target_t.translation_id

reemplace con:

      LEFT JOIN {$this->queryPrepare->prefix()}icl_translations target_t
         ON target_t.trid = source_t.trid
             AND target_t.language_code IN ({$gluedEscapedLanguageCodes})
       LEFT JOIN {$this->queryPrepare->prefix()}icl_translation_status target_ts
         ON target_ts.translation_id = target_t.translation_id

Todos los problemas conocidos →