Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Is there any way to evaluate the language a post/page is written in? I am building a multilingual site and am almost pulling my hair out trying to get the front-end navigation to take the chosen language into account. So far the polylang plugin http://wordpress.org/extend/plugins/polylang/ has worked fine for everything else.

share|improve this question
    
What do you mean 'evaluate'? Analyze the text and detect the language? Or get the language assigned when post was created? –  Max Yudin Feb 11 '13 at 13:42
    
Get the language assigned when the post/page was created. There will be pages written in, say French and Dutch. If my chosen language is Dutch, I don't want links to the pages in French to be visible. –  user27302 Feb 11 '13 at 13:56
    
Simply remove pll_the_languages() from templates or delete the Language Switcher widget. Depends where it comes from. –  Max Yudin Feb 11 '13 at 14:04
    
Tried that to no effect, unfortunately. My menus are still not language-specific. The language is ignored especially when browsing content by category, if that helps diagnose the issue. –  user27302 Feb 11 '13 at 14:25
    
If you mean Custom Menus you have to create one menu per language. See Polylang Navigations menus. –  Max Yudin Feb 11 '13 at 14:37

1 Answer 1

up vote 2 down vote accepted

The main language of a post should be saved in a post meta field. There is no way to detect that automatically. Even Google’s heuristics fail regularly with that.

So add a custom field lang and check with …

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

… what language the post was written in.

Update

Here is a very simple example for a language selector. It will be visible on every post type with a Publish metabox.

enter image description here

get_post_meta( get_the_ID(), '_language', TRUE ); 

… will return the post’s language if available.

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'] );
}
share|improve this answer
    
Thanks for the response, is it possible to add the custom field to the pages post_type as well? –  user27302 Feb 11 '13 at 13:57
    
@user27302 See my update. I have added an example. –  toscho Feb 11 '13 at 14:26
    
You rock! Thanks a million, am definitely on the right track now. –  user27302 Feb 11 '13 at 15:09

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.