Определение языка, на котором написан пост

11 февр. 2013 г., 15:30:55
Просмотры: 14.1K
Голосов: 3

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

6
Комментарии

Что вы имеете в виду под "оценкой"? Анализировать текст и определять язык? Или получать язык, назначенный при создании записи?

Max Yudin Max Yudin
11 февр. 2013 г. 15:42:01

Получать язык, назначенный при создании записи/страницы. Например, будут страницы, написанные на французском и голландском. Если мой выбранный язык - голландский, я не хочу, чтобы ссылки на страницы на французском были видны.

tembamazingi tembamazingi
11 февр. 2013 г. 15:56:16

Просто удалите pll_the_languages() из шаблонов или удалите виджет переключателя языка. Зависит от того, откуда он появляется.

Max Yudin Max Yudin
11 февр. 2013 г. 16:04:31

К сожалению, это не помогло. Мои меню по-прежнему не зависят от языка. Язык игнорируется особенно при просмотре контента по категориям, если это поможет диагностировать проблему.

tembamazingi tembamazingi
11 февр. 2013 г. 16:25:09

Если вы имеете в виду Пользовательские меню, вам нужно создать отдельное меню для каждого языка. См. Навигационные меню Polylang.

Max Yudin Max Yudin
11 февр. 2013 г. 16:37:35

Спасибо вам обоим, ваши ответы определенно прояснили для меня многое

tembamazingi tembamazingi
11 февр. 2013 г. 17:05:00
Показать остальные 1 комментариев
Все ответы на вопрос 3
3

Основной язык записи должен сохраняться в метаполе поста. Нет способа определить его автоматически. Даже эвристические методы 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'] );
}
11 февр. 2013 г. 15:36:07
Комментарии

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

tembamazingi tembamazingi
11 февр. 2013 г. 15:57:29

@user27302 Смотрите мое обновление. Я добавил пример.

fuxia fuxia
11 февр. 2013 г. 16:26:55

Ты просто супер! Огромное спасибо, теперь я точно на правильном пути.

tembamazingi tembamazingi
11 февр. 2013 г. 17:09:30
0

Для REST API, wp-graphql и wp-cli команды wp eval-file мне потребовалось сделать следующее:

wp_get_post_terms( $post->ID, 'language' )[0]->slug
30 авг. 2018 г. 16:57:19
0

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

Источник: https://polylang.pro/doc/function-reference/

10 дек. 2024 г. 00:02:29