detectar el idioma en el que está escrito un post
¿Existe alguna forma de evaluar el idioma en el que está escrito un post/página? Estoy construyendo un sitio multilingüe y casi me arranco el cabello intentando que la navegación en el front-end tenga en cuenta el idioma elegido. Hasta ahora, el plugin polylang http://wordpress.org/extend/plugins/polylang/ ha funcionado bien para todo lo demás.

El idioma principal de una publicación debe guardarse en un campo de metadatos. No hay forma de detectarlo automáticamente. Incluso los algoritmos de Google fallan regularmente con esto.
Por lo tanto, agrega un campo personalizado lang
y verifica con...
$language = get_post_meta( get_the_ID(), 'lang', TRUE );
...en qué idioma está escrita la publicación.
Actualización
Aquí hay un ejemplo muy simple de un selector de idioma. Será visible en todos los tipos de publicación que tengan un metabox de Publicar.
get_post_meta( get_the_ID(), '_language', TRUE );
...devolverá el idioma de la publicación si está disponible.
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">Idioma</label>
<select name="t5_language" id="t5_language_id">';
$current = get_post_meta( get_the_ID(), '_language', TRUE );
$languages = array (
'en' => 'Inglés',
'de' => 'Alemán',
'ja' => 'Japonés'
);
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'] );
}

Gracias por la respuesta, ¿es posible añadir el campo personalizado al post_type de páginas también?

La función que necesitas es pll_get_post_language()
.
