Actualmente estoy trabajando en un sitio de wordpress que debe tener la opción de ofrecerse en francés. He encontrado una manera de hacer que el tema funcione con los archivos po y mo de fr_FR cuando agrego una variable querystring l
. es decir,Cómo hacer que los enlaces permanentes de Wordpress ignoren la reescritura de url personalizada
site.tld
cederá el sitio Inglés de vainilla, mientras que site.tld/?l=fr
activará el código siguiente en mi functions.php para servir la traducción en francés:
<?php
// http://codex.wordpress.org/Plugin_API/Filter_Reference/locale
add_filter('locale', 'set_my_locale');
function set_my_locale($lang) {
if ("fr" == substr(strtolower(trim(strip_tags(stripslashes($_GET['l'])))), 0, 2)) {
// set language to french
return "fr_FR";
} else {
// return original locale
return $lang;
}
}
?>
esta configuración ya está trabajando. mi pregunta es: ¿cómo reescribo el URL así que en lugar de site.tld/?l=fr
puedo anteponer la estructura de la carpeta con fr
, es decir, site.tld/fr/
?
así que si hay una página site.tld/portoflio/autumn/
en inglés, site.tld/fr/portfolio/autumn/
escupirá el francés. Obtuve esta idea en el sitio web de Apple, donde el lenguaje siempre está antepuesto a la estructura de la carpeta.
Ya puedo hacer que esto ocurra con una redirección externa en .htaccess:
RewriteBase/
RewriteCond ^[a-z]{2}/
RewriteRule ^([a-z]{2})/(.*)$ /$2?l=$1 [R,L]
esto funciona, pero una vez que se quita la bandera R
sirve al 404 isntead que no se encuentra traducida-francés. Supongo que lo que hice fue arruinar las reglas de reescritura de WordPress porque necesito usar enlaces permanentes bonitos. ahora estoy configurado para usar Month and name
(/%year%/%monthnum%/%postname%/
) en las opciones generales del administrador.
mi pregunta es, ¿cómo hago que WordPress ignore la parte /fr/
y siga publicando la página/publicación correcta/etc.?
¿esto es posible? estoy en el camino correcto aquí? Necesito tu ayuda especialmente haciendo lo que es WISE y no solo lo que es NICE. Intenté esto http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api pero por mi vida no puedo hacerlo funcionar. :/
ACTUALIZACIÓN: ok, así que aquí tiene algunos avances tomando el ejemplo de @relu a continuación:
Me aseguré mis reglas eran lata de .htaccess
i luego agregó las reglas de @ relu, pero de la siguiente manera, porque Relu siempre me envió a la misma dirección sin el /fr
:
<?
// http://pmg.co/custom-wordpress-shortlinks
add_action('init', 'pmgtut_add_rewrites');
function pmgtut_add_rewrites() {
add_rewrite_rule('^([a-z]{2})/?$', 'index.php?l=$matches[1]', 'top');
add_rewrite_rule('^([a-z]{2})/(.*)$', 'index.php?l=$matches[1]&q=$matches[2]', 'top');
}
add_filter('query_vars', 'pmgtut_query_vars', 10, 1);
function pmgtut_query_vars($vars) {
$vars[] = 'l';
return $vars;
}
?>
ahora los /fr
estancias en la barra de direcciones, por lo que es una buena cosa, pero persisten dos problemas:
wordpress me está sirviendo a la página principal del índice. parece que no está usando la parte
&q=$matches[2]
de la regla; yla configuración regional aún no se establece correctamente. Verifiqué si la variable
l
se está alimentando, así que agreguéecho 'l: $l';
después de$l = get_query_var('l');
y curiosamente recibí dos ecos: unol:
y otrol: fr
justo después de eso. ¿Se está ejecutando el filtrolocale
dos veces?parece ser la primera vez que no ve el valor de la consultavar, y luego parece haber una segunda vez que muestral:
confr
ya está allí ... al final del día, la configuración regional aún no se cambia .
aaaah ayuda.
INFORME FINAL DE ACTUALIZACIÓN: en el último suspiro de frustración Busqué de nuevo, y encontraron esta qtranslate plugin. hace lo que necesito gracias a todos, especialmente al esfuerzo épico de @relu y a la permanencia en el poder.
wow lo siento, acabo de ver esto. ¡¡Gracias!! ok, entonces cuando agrego estos, me llevan de vuelta al enlace sin el '/ fr' hmm .. alguna idea? estoy despistado atm –
¿Eliminaste esas reglas de .htaccess? ¡No son necesarios! – relu
yeap, lo hice ... también me aseguré de que solo las reglas de wordpress estén ahí ... te avisaré lo antes posible cuando lo haga funcionar. mientras tanto, déjame saber si hay algo más que podamos hacer. muchas gracias, '¡preciate hombre! –