it-swarm.com.de

ermitteln Sie die Sprache, in der ein Beitrag verfasst ist

Gibt es eine Möglichkeit, die Sprache zu bewerten, in der ein Beitrag/eine Seite geschrieben ist? Ich baue eine mehrsprachige Site auf und streife mir fast die Haare, um die Front-End-Navigation so zu gestalten, dass die gewählte Sprache berücksichtigt wird. Bisher hat das polylang-Plugin http://wordpress.org/extend/plugins/polylang/ für alles andere gut funktioniert.

3
tembamazingi

Die Hauptsprache eines Posts sollte in einem Post-Metafeld gespeichert werden. Es gibt keine Möglichkeit, dies automatisch zu erkennen. Auch Googles Heuristiken scheitern dabei regelmäßig.

Fügen Sie also ein benutzerdefiniertes Feld lang hinzu und überprüfen Sie mit ...

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

… In welcher Sprache der Beitrag verfasst wurde.

Aktualisieren

Hier ist ein sehr einfaches Beispiel für eine Sprachauswahl. Es wird auf jedem Beitragstyp mit einer Publish Metabox angezeigt.

enter image description here

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

… Gibt die Sprache des Beitrags zurück, sofern verfügbar.

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

Für den Rest brauchte ich api, wp-graphql und wp-cli's wp eval-file

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