Polylang (multiidioma)
5 idiomas: ES, EN, FR, IT, PT (heredados de Joomla). Polylang gestiona traducciones de posts, categorías, menús y páginas.
Idiomas
| Idioma | term_taxonomy_id | URL prefix |
|---|---|---|
| ES | 1404 (FEA_LANG_ES_TTID en código) |
sin prefijo (default) |
| EN | — | /en/ |
| FR | — | /fr/ |
| IT | — | /it/ |
| PT | — | /pt/ |
5 portadas
Cada idioma tiene su propia portada. Todas usan los shortcodes de fea-homepage.php.
| Idioma | Page ID |
|---|---|
| ES | 26542 |
| EN | 43889 |
| FR | 42756 |
| IT | 42757 |
| PT | 42758 |
fea_is_front_page() en fea-homepage.php detecta cualquiera de las 5 para inyectar el CSS de portada.
Bug WP_Tax_Query con Polylang
Bug conocido en Polylang + WordPress core. La query:
get_posts([
'lang' => $lang,
'category__in' => [$cat],
]);
genera SQL con AND 0=1 cuando se combinan lang y category__in con category__in siendo numérico. La query devuelve vacío y, en contextos de archivo de categoría, WordPress responde 404.
Fix
NO pasar lang explícito. Polylang ya filtra automáticamente por el idioma actual de la página/petición:
get_posts([
'category__in' => [$cat], // sin 'lang'
]);
Dónde afecta
/category/cartasemana/en EN/FR/IT/PT → 404. Issue #2.- Cualquier código que combine filtro por idioma y filtro por categoría numérica.
Bug get_term_by('slug', ...) en idiomas no-ES
get_term_by('slug', $slug, 'category') devuelve false cuando el idioma actual no es ES, incluso si el término existe en la traducción.
Fix
Saltar la API y usar $wpdb directo:
$tt_id = $wpdb->get_var($wpdb->prepare(
"SELECT t.term_id FROM {$wpdb->terms} t
JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id
WHERE t.slug = %s AND tt.taxonomy = %s",
$slug, 'category'
));
Menú multiidioma
El selector de idioma en el header se renderiza con JavaScript inyectado en wp_footer, no con el widget de Polylang. Razones:
- Permite construir un mapa idioma → URL traducida de la página actual con
$wpdbdirecto, bypaseando el filtro de Polylang. - Resultado robusto incluso cuando el sitio está en un idioma minoritario.
Comportamiento por defecto
- Idioma por defecto: ES.
- URLs sin prefijo → ES.
- Cookie + browser detection para redirigir a
/lang/la primera visita (configurado en Polylang settings).
Polylang admin
wp-admin → Idiomas → Configuración. La gestión de traducciones de post/categorías se hace desde cada editor individual con el widget "Idioma" en la sidebar.