Establecer idioma por publicación

4

Tengo un blog bilingüe con el inglés como idioma principal y árabe. Actualmente utilizo la publicación "Campo personalizado" para indicar que la publicación es árabe y la utilizo en el tema de mi hijo para cambiar la dirección a RTL y la traducción del texto a árabe. Sin embargo, lo hago manualmente, lo que significa que personalizo el tema por completo. con cadenas en ambos idiomas y elija la correcta según el valor del campo personalizado y también establezca la dirección de las etiquetas html para el título de la publicación, el cuerpo y los comentarios. Está funcionando, sin embargo, cambiar el tema más tarde significa que debo rehacer todo. También estoy tratando de usar un complemento de comentario "wpDiscuz" pero no hay otra forma fácil de controlar el idioma que no sea la edición del complemento, lo que no quiero hacer ya que quiero poder actualizarlo fácilmente y no rehacerlo. Cambios después de cada actualización.

Dado que WP ya es compatible con el idioma árabe y tiene las traducciones como archivos .mo con el rtl css correcto, y también el nuevo complemento es compatible con las traducciones .mo. Pensé que utilizaría eso y encontraría una alternativa para cambiar el idioma de wordpress al árabe solo para ciertas publicaciones. Sin embargo, todavía no estoy en condiciones de hacerlo.

Creé un complemento con un solo archivo functions.php y este es el contenido:

function my_reset_locale($locale) {
    $locale = 'ar';
    return $locale;
}
add_filter('locale','my_reset_locale',10);

Este lo cambia para todo (página principal y todas las publicaciones individuales), intenté leer el ID de la publicación

global $post;
$postId = isset($post) ? $post->ID : '';

Pero las primeras 4 llamadas a mi función suceden antes de que se establezca $ post- > ID y si espero hasta que se establezca, se vuelve demasiado tarde ya que el idioma ya se cargó y cambiar $ locale después de eso no hace nada.

Entonces, ¿qué puedo hacer para obtener información sobre la publicación antes y antes de que se lea el idioma (creo que se llama a "load_textdomain" para seleccionar la traducción según la configuración regional ")

    
pregunta Fahad Alduraibi 03.04.2016 - 00:41

1 respuesta

2

No pude encontrar una respuesta, así que terminé proporcionando la solución.

No fue sencillo, dado que no soy un experto en wordpress ni en php, pero la documentación de Wordpress es excelente, así que aquí está la solución:

// Set the post language when loading up the page based on the store meta
function ppl_set_post_language() {
    $postID = url_to_postid( $_SERVER["REQUEST_URI"] );
    if ($postID > 0) {
        $postLanguage = esc_attr( get_post_meta( $postID, '_ppl_post_language', true ) );
        if ( ! empty( $postLanguage ) ) {
            global $locale;
            $locale = $postLanguage;
        }
    }
}
// Any call to 'url_to_postid' earlier then 'setup_theme' will generate a fatal error.
add_action('setup_theme', 'ppl_set_post_language');

Al editar la publicación o la página, almacene el código de idioma (por ejemplo, en_US o ar ) en la publicación meta . Esta parte es fácil, sin embargo, el problema es cuando se muestra la página ¿Cuándo ejecuta el código que verifica el idioma? Si lo ejecutas demasiado pronto, no tendrás la ID de la publicación, ya que aún no está cargado con wordpress, y si esperas y ejecutas el código tarde, será demasiado tarde ya que wordpress cargará el idioma predeterminado. El punto dulce que encontré está en la acción setup_theme ya que en ese paso las traducciones aún no están cargadas y podemos llamar a url_to_postid para obtener el ID de la publicación que usamos para recuperar la meta de la publicación.

Después de hacer esto, pensé, ¿por qué no crear un complemento de WordPress del que otros puedan beneficiarse? Aquí está:

enlace

    
respondido por el Fahad Alduraibi 13.04.2016 - 22:01

Lea otras preguntas en las etiquetas