Rilevare la lingua in cui è scritto un articolo
Esiste un modo per valutare la lingua in cui è scritto un articolo o una pagina? Sto costruendo un sito multilingue e sto quasi perdendo la pazienza nel tentativo di far sì che la navigazione front-end tenga conto della lingua scelta. Finora il plugin Polylang http://wordpress.org/extend/plugins/polylang/ ha funzionato bene per tutto il resto.

La lingua principale di un articolo dovrebbe essere salvata in un campo meta del post. Non esiste un modo automatico per rilevarla. Anche gli algoritmi di Google falliscono regolarmente in questo.
Quindi aggiungi un campo personalizzato lang
e controlla con…
$language = get_post_meta( get_the_ID(), 'lang', TRUE );
… in quale lingua è stato scritto l'articolo.
Aggiornamento
Ecco un esempio molto semplice per un selettore di lingua. Sarà visibile su ogni tipo di post con un metabox Pubblica.
get_post_meta( get_the_ID(), '_language', TRUE );
… restituirà la lingua dell'articolo se disponibile.
add_action( 'post_submitbox_misc_actions', 't5_language_selector' );
add_action( 'save_post', 't5_save_language' );
function t5_language_selector()
{
print '<div class="misc-pub-section">
<label for="t5_language_id">Lingua</label>
<select name="t5_language" id="t5_language_id">';
$current = get_post_meta( get_the_ID(), '_language', TRUE );
$languages = array (
'en' => 'Inglese',
'de' => 'Tedesco',
'ja' => 'Giapponese'
);
foreach ( $languages as $key => $language )
printf(
'<option value="%1$s" %2$s>%3$s</option>',
$key,
selected( $key, $current, FALSE ),
$language
);
print '</select></div>';
}
function t5_save_language( $id )
{
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
return;
if ( ! current_user_can( 'edit_post', $id ) )
return;
if ( ! isset ( $_POST['t5_language'] ) )
return delete_post_meta( $id, '_language' );
if ( ! in_array( $_POST['t5_language'], array ( 'en', 'de', 'ja' ) ) )
return;
update_post_meta( $id, '_language', $_POST['t5_language'] );
}

Grazie per la risposta, è possibile aggiungere il campo personalizzato anche al post_type delle pagine?

La funzione di cui hai bisogno è pll_get_post_language()
.
