Определение языка, на котором написан пост
Есть ли способ определить язык, на котором написан пост или страница? Я создаю мультиязычный сайт и уже почти рву на себе волосы, пытаясь заставить фронтенд-навигацию учитывать выбранный язык. Пока что плагин Polylang http://wordpress.org/extend/plugins/polylang/ отлично справлялся со всем остальным.

Основной язык записи должен сохраняться в метаполе поста. Нет способа определить его автоматически. Даже эвристические методы Google часто ошибаются в этом.
Поэтому добавьте пользовательское поле lang
и проверяйте с помощью …
$language = get_post_meta( get_the_ID(), 'lang', TRUE );
… на каком языке написана запись.
Обновление
Вот очень простой пример селектора языка. Он будет отображаться для всех типов записей, у которых есть метабокс Опубликовать.
get_post_meta( get_the_ID(), '_language', TRUE );
… вернет язык записи, если он указан.
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">Язык</label>
<select name="t5_language" id="t5_language_id">';
$current = get_post_meta( get_the_ID(), '_language', TRUE );
$languages = array (
'en' => 'Английский',
'de' => 'Немецкий',
'ja' => 'Японский'
);
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'] );
}

Спасибо за ответ. Можно ли добавить произвольное поле и для типа записей "страницы"?

Функция, которая вам нужна, это pll_get_post_language()
.
