Ir al contenido

Para desarrolladores

Convenciones: las funciones públicas y los hooks usan el prefijo lingopress_, el namespace es BallesDev\LingoPress y el text domain es ballesdev-lingopress. Sin Composer ni dependencias externas.

Función Qué hace
lingopress_languages_list( $args ) Lista de idiomas del sitio.
lingopress_default_language( $field ) Idioma por defecto (slug u otro campo).
lingopress_current_language( $field ) Idioma de la request actual (frontend).
lingopress_add_language( $args ) Crea un idioma (las rewrite rules se regeneran automáticamente).
Función Qué hace
lingopress_set_post_language( $post_id, $lang ) Asigna idioma a una entrada.
lingopress_get_post_language( $post_id, $field ) Idioma de una entrada.
lingopress_save_post_translations( $translations ) Vincula entradas como traducciones ([ 'es' => 12, 'en' => 34 ]).
lingopress_get_post_translations( $post_id ) Grupo de traducciones de una entrada.
lingopress_get_post( $post_id, $lang ) ID de la traducción de una entrada en un idioma.
lingopress_set_term_language / lingopress_get_term_language Ídem para términos.
lingopress_save_term_translations / lingopress_get_term_translations / lingopress_get_term Ídem para términos.

Las entradas creadas antes de activar LingoPress no tienen idioma hasta que se vuelven a guardar; lingopress_set_post_language() lo asigna en lote desde un script.

Función Qué hace
lingopress_the_languages( $args ) Renderiza el selector de idiomas. Mismas opciones que el código corto (ver Selector de idioma y menús).
lingopress_register_string( $name, $text ) Registra una cadena traducible en String translations.
lingopress__( $text ) / lingopress_e( $text ) Devuelve / imprime la traducción de una cadena registrada en el idioma actual.
lingopress_translate_string( $text, $lang ) Traducción de una cadena a un idioma concreto.

Registra las cadenas en todas las requests, también en el admin: String translations lista las cadenas registradas mientras carga, y Remove unused strings borra las traducciones guardadas de las cadenas que no se registraron en esa request.

Hook Tipo Cuándo
lingopress_language_defined acción El idioma de la request quedó resuelto (frontend, en setup_theme).
lingopress_translated_post_types filtro Lista de post types traducibles (entradas y páginas por defecto; attachment si la traducción de medios está activa).
lingopress_translated_taxonomies filtro Lista de taxonomías traducibles (category y post_tag por defecto).
lingopress_ai_system_prompt filtro Permite modificar el system prompt enviado a la IA.
lingopress_ai_provider filtro Permite sustituir el proveedor de IA (inyectar uno propio).
lingopress_switcher_items filtro Modifica los ítems del selector de idiomas.
lingopress_sync_post_meta filtro Agrega metadatos propios a la sincronización entre traducciones.
lingopress_hreflang filtro Mapa código hreflang => URL antes de imprimirlo.
lingopress_canonical_redirect filtro URL canónica antes de redirigir; devuelve false o '' para cancelar la redirección.

Los productos de una tienda, los eventos y otros post types o taxonomías propios no son traducibles de entrada. Agrégalos con los filtros:

add_filter( 'lingopress_translated_post_types', function ( $post_types ) {
$post_types[] = 'product';
return $post_types;
} );
add_filter( 'lingopress_translated_taxonomies', function ( $taxonomies ) {
$taxonomies[] = 'product_cat';
return $taxonomies;
} );

La IA traduce el título, el contenido y el extracto; los campos personalizados (post meta) no se traducen ni se copian, salvo que los agregues a la sincronización con lingopress_sync_post_meta.

  • Campos lang (lectura/escritura, con chequeo de capacidades) y translations en las colecciones wp/v2/* de los post types y taxonomías traducibles.
  • Filtrado de colecciones por idioma con ?lang=: GET /wp-json/wp/v2/posts?lang=en. lang=all desactiva el filtro.
  • Endpoints propios: GET /wp-json/lingopress/v1/languages (público); POST y DELETE requieren manage_options.
  • El editor de bloques precarga sus colecciones ya filtradas por el idioma de la entrada en edición.
  • wp lingopress import-polylang (desde la 1.1.1): importa los idiomas, el idioma del contenido y los grupos de traducción desde Polylang, esté activo o no. Se puede ejecutar varias veces: lo que ya está en LingoPress se salta y se respeta el idioma por defecto elegido en LingoPress. Termina con un error si el sitio no tiene datos de Polylang.

Las claves definidas como constantes tienen prioridad sobre las guardadas en LingoPress → AI translation, y la pantalla las muestra como “Defined via” la constante:

define( 'LINGOPRESS_ANTHROPIC_API_KEY', '...' );
define( 'LINGOPRESS_GEMINI_API_KEY', '...' );
define( 'LINGOPRESS_OPENAI_API_KEY', '...' );
define( 'LINGOPRESS_GROQ_API_KEY', '...' );

Con el proveedor WordPress (Connectors) (WordPress 7.0+), LingoPress usa wp_ai_client_prompt() y no guarda ninguna clave.

Cuatro taxonomías propias, sin tablas custom: lingopress_language y lingopress_term_language (idioma de entradas y términos), lingopress_post_translations y lingopress_term_translations (grupos de traducción). El mismo modelo probado por Polylang, con prefijo propio: sobrevive a exports/imports WXR y permite convivir con los datos de Polylang durante una migración.