Vamos a explicar paso a paso, como crear un plugin para traducir las etiquetas y descripciones de los campos creados con el plugin Advanced Custom Fields (ACF), sin utilizar plugins de traducción.

Primero generamos el contenido con el plugin Advanced Custom Fields (doy por hecho que ya lo sabéis utilizar),

Una vez hecho esto, vamos a instalar un plugin llamado Pluginception, este nos permite crear plugins de manera muy sencilla. Una vez instalado veréis que en Plugins aparece otra opción llamada “Crear nuevo plugin”. Sólo poniendo el nombre y la descripción será suficiente por el momento. En nuestro ejemplo lo llamaremos “mi-acf-plugin”.

Para que las etiquetas sean traducibles al exportar en el archivo hay que añadir el siguiente código en el archivo “functions.php” de nuestro tema hijo (siempre, siempre trabajar con tema hijo).

// Para traducir ACF
function custom_acf_settings_textdomain($domain) {
return 'mi-acf-plugin';
}
add_filter('acf/settings/l10n_textdomain', 'custom_acf_settings_textdomain');

Ahora volvemos a la pestaña “Campos personalizados” de nuestro panel de control y en “Herramientas”, seleccionamos todos los campos y hacemos click en “Generate PHP”. Hemos de copiar y pegar el resultado en nuestro nuevo plugin creado. Para ello, vamos a “Plugins / Editor” y en el desplegable “Elige el plugin a seleccionar” escojemos el plugin que acabamos de crear (mi-acf-plugin) y pegamos el código.

Además de esto vamos a añadir algunas cosas al principio del archivo del plugin para que sea traducible. Por defecto vemos:

/*
Plugin Name: mi-acf-plugin
Plugin URI:
Description: Plugin para crear los CPT y taxonomias (recordar activar y desactivar al usar CPT UI)
Version:
Author:
Author URI:
License:
License URI:
*/

Y tiene que quedar así :
/*
Plugin Name: mi-acf-plugin
Plugin URI:
Description: Plugin para crear los CPT y taxonomias (recordar activar y desactivar al usar CPT UI)
Version:
Author:
Author URI:
Text Domain: mi-acf-plugin
Domain Path: /languages
License:
License URI:
*/

Si os fijáis hemos añadido:
Text Domain: mi-acf-plugin
Domain Path: /languages

De esta manera  le estamos diciendo que el plugin tiene un “text domain” y que se encuentra el la carpeta “languages”, podríamos hacerlo en la raíz, pero es preferible tener todo bien ordenado.
Además, justo debajo, añadiremos el siguiente código para que cargue el text domain:
/* Load plugin textdomain.*/
function mi_acf_load_textdomain() {
load_plugin_textdomain( 'mi-acf-plugin', false, basename( dirname( __FILE__ ) ) . '/languages' );
}
add_action( 'init', 'mi_acf_load_textdomain' );

Ahora vamos a crear el archivo “.pot” que genera las traducciones, para ello recomiendo bajar el archivo Blank-WordPress-Pot, que nos permite de una manera sencilla recuperar  las cadenas para traducir. Descomprimimos el archivo y renombramos el archivo “Blank-WordPress.pot” como “mi-acf-plugin-XX_xx.pot”.

Descargamos el plugin que acabamos de crear “mi-plugin”, y dentro creamos una carpeta llamada “languages” donde colocaremos el archivo “mi-plugin-XX_xx.pot”.

Abrimos el programa Poedit, y vamos a “Abrir”, y abrimos el archivo “mi-plugin-XX_xx.pot”, y seleccionamos la opción “Extraer desde código fuente”. En “Rutas de fuentes” le daremos al botón “+” y “Añadir archivos” y ahora seleccionamos el archivo “mi-plugin.php” (podemos quitar la ruta “.”), seleccionamos “Abrir” y “Aceptar”, ya aparecerán las cadenas traducibles en Poedit. Ahora en la parte inferior apretamos el botón “Crear traducción nueva”, seleccionamos el idioma. Ahora ya podemos traducir las cadenas de los Custom Post Types, una vez traducidas guardamos el archivo .po dentro de la carpeta “Languages”, y la subimos dentro de la de nuestro plugin, y listo!!!.

No hay que desactivar el plugin Advanced Custom Fields.

Este caso lo hemos aplicado para un cliente donde nos hemos encontrado con la necesidad de traducir toda la parte del Admin, pero no los textos introducidos en los campos, ya que cada uno de los usuarios escribirirá sus propias entradas personalizadas independientes y en su idioma cada uno, no existe la necesidadad de traducir entradas que se podría hacer con plugins como WPLM.

Para complementar las traducciones podeís ir al post Cómo crear un plugin para traducir CPT y Taxonomias de Custom Post Types UI en Wordpress, además para completar todo, recomiendo utilizar el plugin Groups, pero eso ya es otra guerra…