Files
feadulta/scripts/remap_translation_cats.php

43 lines
1.5 KiB
PHP

<?php
/**
* Remapea las categorías de las traducciones automáticas (meta traduccion_origen)
* a los términos traducidos de su propio idioma. Idempotente y sin llamar a Gemma.
*
* Arregla las traducciones creadas antes de que fea_translate_helper.php mapeara
* categorías (issue #75): p.ej. una carta EN que quedó en la categoría ES `cartasemana`
* pasa a la categoría EN `letter-of-the-week`, poblando el archivo de carta por idioma.
*
* Uso: docker exec wordpress-web php /tmp/remap_translation_cats.php
*/
$_SERVER['REQUEST_URI'] = $_SERVER['REQUEST_URI'] ?? '/';
$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_HOST'] ?? 'farmer.taild3aaf6.ts.net';
require_once '/var/www/html/wp-load.php';
if (!function_exists('pll_get_term')) { fwrite(STDERR, "Polylang no disponible\n"); exit(2); }
global $wpdb;
$ids = $wpdb->get_col("SELECT DISTINCT post_id FROM {$wpdb->postmeta} WHERE meta_key='traduccion_origen'");
$fixed = 0;
foreach ($ids as $pid) {
$pid = (int) $pid;
$lang = pll_get_post_language($pid);
if (!$lang || $lang === 'es') continue;
$cats = wp_get_post_categories($pid);
$mapped = [];
$changed = false;
foreach ($cats as $c) {
$tc = (int) pll_get_term($c, $lang);
if ($tc && $tc !== $c) { $mapped[] = $tc; $changed = true; }
else { $mapped[] = $c; }
}
if ($changed) {
wp_set_post_categories($pid, array_values(array_unique($mapped)));
$fixed++;
}
}
echo "Remapeadas categorías en $fixed traducciones (de " . count($ids) . " revisadas)\n";