web-dev-qa-db-ja.com

投稿が書かれている言語を検出する

投稿/ページが書かれている言語を評価する方法はありますか?私は多言語サイトを構築していて、選択された言語を考慮に入れるためにフロントエンドナビゲーションを取得しようとしている私の髪の毛をほとんど引き出しています。これまでのところpolylangプラグイン http://wordpress.org/extend/plugins/polylang/ は他のすべてのためにうまく働いています。

3
tembamazingi

投稿の主言語は投稿メタフィールドに保存する必要があります。それを自動的に検出する方法はありません。グーグルのヒューリスティックでさえもそれを定期的に失敗します。

それで、カスタムフィールドlangを追加して、…で確認してください。

$language = get_post_meta( get_the_ID(), 'lang', TRUE );

…投稿の言語は何語ですか。

更新

これは言語セレクタの非常に簡単な例です。それは Publish metaboxですべての投稿タイプに表示されます。

enter image description here

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">Language</label>
        <select name="t5_language" id="t5_language_id">';

    $current = get_post_meta( get_the_ID(), '_language', TRUE );
    $languages = array (
        'en' => 'English',
        'de' => 'Deutsch',
        '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'] );
}
3
fuxia

残りのAPIについては、wp-graphqlとwp-cliのwp eval-file私がする必要がありました

wp_get_post_terms( $post->ID, 'language' )[0]->slug
0
Epeli