detectar el idioma en el que está escrito un post

11 feb 2013, 15:30:55
Vistas: 14.1K
Votos: 3

¿Existe alguna forma de evaluar el idioma en el que está escrito un post/página? Estoy construyendo un sitio multilingüe y casi me arranco el cabello intentando que la navegación en el front-end tenga en cuenta el idioma elegido. Hasta ahora, el plugin polylang http://wordpress.org/extend/plugins/polylang/ ha funcionado bien para todo lo demás.

6
Comentarios

¿Qué quieres decir con 'evaluar'? ¿Analizar el texto y detectar el idioma? ¿O obtener el idioma asignado cuando se creó la publicación?

Max Yudin Max Yudin
11 feb 2013 15:42:01

Obtener el idioma asignado cuando se creó la publicación/página. Habrá páginas escritas en, digamos, francés y holandés. Si mi idioma elegido es holandés, no quiero que los enlaces a las páginas en francés sean visibles.

tembamazingi tembamazingi
11 feb 2013 15:56:16

Simplemente elimina pll_the_languages() de las plantillas o borra el Widget del Selector de Idioma. Depende de dónde provenga.

Max Yudin Max Yudin
11 feb 2013 16:04:31

Lo intenté sin éxito, desafortunadamente. Mis menús todavía no son específicos para cada idioma. El idioma se ignora especialmente al navegar contenido por categoría, si eso ayuda a diagnosticar el problema.

tembamazingi tembamazingi
11 feb 2013 16:25:09

Si te refieres a Menús Personalizados, debes crear un menú por idioma. Ver Menús de navegación en Polylang.

Max Yudin Max Yudin
11 feb 2013 16:37:35

Gracias a ambos, sus respuestas definitivamente aclararon mucho las cosas para mí

tembamazingi tembamazingi
11 feb 2013 17:05:00
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 3
3

El idioma principal de una publicación debe guardarse en un campo de metadatos. No hay forma de detectarlo automáticamente. Incluso los algoritmos de Google fallan regularmente con esto.

Por lo tanto, agrega un campo personalizado lang y verifica con...

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

...en qué idioma está escrita la publicación.

Actualización

Aquí hay un ejemplo muy simple de un selector de idioma. Será visible en todos los tipos de publicación que tengan un metabox de Publicar.

Selector de idioma en el metabox de publicación

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

...devolverá el idioma de la publicación si está disponible.

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

    $current = get_post_meta( get_the_ID(), '_language', TRUE );
    $languages = array (
        'en' => 'Inglés',
        'de' => 'Alemán',
        'ja' => 'Japonés'
    );

    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 feb 2013 15:36:07
Comentarios

Gracias por la respuesta, ¿es posible añadir el campo personalizado al post_type de páginas también?

tembamazingi tembamazingi
11 feb 2013 15:57:29

@user27302 Mira mi actualización. He añadido un ejemplo.

fuxia fuxia
11 feb 2013 16:26:55

¡Eres increíble! Muchísimas gracias, definitivamente voy por buen camino ahora.

tembamazingi tembamazingi
11 feb 2013 17:09:30
0

Para la API REST, wp-graphql y el comando wp eval-file de wp-cli, necesité hacer:

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

La función que necesitas es pll_get_post_language().

Fuente: https://polylang.pro/doc/function-reference/

10 dic 2024 00:02:29