ejecutar esto tras publicar las traducciones. * * Deriva los términos por Polylang desde los términos ES base: * cartasemana = term 6 | cartas-de-otras-semanas = term 21 * * Uso: CARTA= php demote_old_cartasemana.php (dry-run) * APPLY=1 CARTA= php demote_old_cartasemana.php */ require getenv('FEA_WP_LOAD') ?: '/var/www/html/wp-load.php'; $APPLY = getenv('APPLY') === '1'; $CARTA = (int)(getenv('CARTA') ?: 0); if (!$CARTA) { fwrite(STDERR,"Falta CARTA=\n"); exit(1); } $cs_terms = pll_get_term_translations(6); // cartasemana por idioma $otras_terms = pll_get_term_translations(21); // cartas de otras semanas por idioma $carta_tr = pll_get_post_translations($CARTA); foreach ($cs_terms as $lang=>$cs) { $keep = $carta_tr[$lang] ?? 0; $otras = $otras_terms[$lang] ?? 0; $posts = get_posts(['post_type'=>'post','numberposts'=>-1,'post_status'=>'any','fields'=>'ids', 'tax_query'=>[['taxonomy'=>'category','field'=>'term_id','terms'=>$cs]]]); $moved=0; foreach ($posts as $pid) { if ($pid == $keep) continue; if ($APPLY) { if ($otras) wp_set_object_terms($pid,[(int)$otras],'category',true); // append a otras wp_remove_object_terms($pid,[(int)$cs],'category'); } $moved++; } if ($APPLY) clean_term_cache([$cs,$otras],'category'); $t=get_term($cs); echo sprintf("%s: %s %d | '%s' count=%d keep=#%d\n", strtoupper($lang), $APPLY?"movidas":"se moverían", $moved, $t->slug, $t->count, $keep); } echo $APPLY ? "APLICADO\n" : "DRY-RUN (APPLY=1 para aplicar)\n";