Como traduzir as opções de tema no Personalizar (Polylang e WPML)

  • Last modified: 4 de julho de 2019
  • Reading time: 4 mins
  • Read in English

Depois de meses pensando nisso, decidi criar uma versão em inglês do blog para tentar captar trabalhos entre o público-alvo da Codeable (basicamente qualquer pessoa que consiga pagar em dólar americano sem sofrer absurdamente com o câmbio). Estava entre transformar essa instalação WordPress em multisite ou usar um plugin e, depois de uma conversa no twitter, decidi usar o Polylang.

Eu costumava trabalhar com o WPML, mas como o Polylang é grátis decidi tentar. Como o tema aqui do blog é simples não tive nenhuma dificuldade, a não ser com a tradução de uma opção que eu tenho no Personalizar. Está vendo a licença da Creative Commons que eu uso aqui no rodapé? Então, isso é um campo no Personalizar, criado dessa forma:

function felipeelia_customize_register( $wp_customize ) {
	$wp_customize->add_section(
		'felipeelia_rodape',
		array(
			'title'    => 'Rodapé',
			'priority' => 125,
		)
	);
	$wp_customize->add_setting(
		'copyright',
		array(
			'default'    => '',
			'capability' => 'edit_theme_options',
		)
	);
	$wp_customize->add_control(
		'copyright',
		array(
			'label'    => 'Copyright',
			'section'  => 'felipeelia_rodape',
			'settings' => 'copyright',
			'type'     => 'textarea',
		)
	);
}
add_action( 'customize_register', 'felipeelia_customize_register' );

Dessa forma eu crio um campo Copyright na seção Rodapé do Personalizar e depois eu uso esse código no meu footer.php:

<?php echo get_theme_mod( 'copyright' ); ?>

Acontece que eu precisava traduzir o texto e eu não sabia como. Até desconfiava, mas ainda não tinha feito nada parecido. Há muito tempo, o WPML criou um padrão de arquivo, o wpml-config.php, que permite que plugins e temas declarem quais tipos de conteúdo, taxonomias e opções de administração deveriam ser traduzidas. Theme mods entram nessa categoria de opções de administração. Como já era o padrão da época, o Polylang também usa esse mesmo arquivo. Sim, com o nome do concorrente no nome.

Na verdade, tudo o que é armazenado na tabela wp_options fica na categoria de textos administrativos. Opções do tema, essas que a gente chama com get_theme_mod, ficam em uma opção com nome theme_mods_NOMETEMA e cujo valor é um array associativo serializado, ou seja, é um array com chaves nomeadas que passa pela função serialize do PHP antes de ser armazenado. No fim das contas, tudo o que eu precisei fazer foi criar um arquivo chamado wpml-config.xml na raíz do meu tema e colocar o seguinte conteúdo nele:

<wpml-config>
    <admin-texts>
        <key name="theme_mods_felipeelia">
            <key name="copyright" />
        </key>
    </admin-texts>
</wpml-config>

Reparem que felipeelia, nesse caso, é o slug do meu tema.

Se esse conteúdo foi útil para você, não se esqueça de compartilhar e deixar um comentário! Isso sempre ajuda bastante 🙂