Attualmente sto lavorando su un sito wordpress che deve avere la possibilità di essere offerto in francese. Ho trovato un modo per far funzionare il tema con i file po e mo fr_FR quando aggiungo una variabile querystring l
. vale a direCome rendere permalink di Wordpress ignorare riscrittura di URL personalizzata
site.tld
sarà cedere il sito inglese di vaniglia, mentre site.tld/?l=fr
attiverà il seguente codice nel mio functions.php per servire il dizionario francese:
<?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;
}
}
?>
questa messa a punto è già al lavoro. la mia domanda è: come faccio a riscrivere l'url così invece di site.tld/?l=fr
posso semplicemente anteporre la struttura della cartella a fr
, cioè site.tld/fr/
?
così come se ci fosse una pagina site.tld/portoflio/autumn/
in inglese, site.tld/fr/portfolio/autumn/
sputerà quella francese. Ho avuto questa idea dal sito Web di Apple, dove la lingua è sempre anteposta alla struttura delle cartelle.
posso già fare questo accadere con un reindirizzamento esterno .htaccess:
RewriteBase/
RewriteCond ^[a-z]{2}/
RewriteRule ^([a-z]{2})/(.*)$ /$2?l=$1 [R,L]
questo funziona, ma una volta che rimuovo la bandiera R
serve franco-tradotto 404 not found isntead. sto indovinando quello che ho fatto è incasinare con le regole di riscrittura di wordpress perché ho bisogno di usare i permalink piuttosto. in questo momento sono impostato per utilizzare Month and name
() nelle opzioni generali di amministrazione.
la mia domanda è, come faccio a fare wordpress ignorare la parte /fr/
e ancora servire la pagina corretta/post/etc?
è possibile? sono sulla strada giusta qui? ho bisogno del tuo aiuto, specialmente di fare ciò che è WISE e non solo ciò che è bello. ho provato questo http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api ma per la vita di me non riesco a farlo funzionare. :/
UPDATE: ok, quindi ecco qualche progresso prendendo spunto da @relu di seguito:
ho fatto che le mie regole sono state in scatola da .htaccess
Ho poi aggiunto le regole da @ relu ma nel modo seguente, perché Relu mi ha sempre inviato allo stesso indirizzo senza il /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;
}
?>
ora le /fr
soggiorni nella barra degli indirizzi, in modo che sia una buona cosa, ma due problemi persistono:
wordpress mi sta servendo la pagina indice principale. sembra che non stia usando la parte
&q=$matches[2]
della regola; eil locale non viene impostato correttamente. Ho controllato se la variabile
l
è stata alimentata, quindi ho aggiuntoecho 'l: $l';
dopo$l = get_query_var('l');
e ho notato due echi: unol:
e un altrol: fr
subito dopo. il filtro viene eseguito due volte?sembra la prima volta che non vede il valore della queryvar, e poi sembra esserci una seconda volta che emettel:
confr
già lì dentro .. alla fine della giornata le impostazioni locali non vengono cambiate .
aiuto aaaah.
AGGIORNAMENTO FINALE: nel mio ultimo respiro di frustrazione che ho cercato di nuovo, e ho trovato questo plugin qTranslate. fa quello che mi serve. grazie per tutto, specialmente per l'epico sforzo di @ relu e per rimanere in pow'r.
wow scusa ho appena visto questo. Grazie!! ok, quindi quando aggiungo questi, mi riportano al link senza '/ fr' hmm .. qualche pensiero? am clueless atm –
Hai rimosso quelle regole da .htaccess? Non sono necessari! – relu
yeap, ha fatto così .. ho anche fatto in modo che solo le parole "rwrules" siano lì ... ti farò sapere appena possibile quando lo farò funzionare. nel frattempo sappi anche che se c'è una somma che non potremmo fare. grazie mille, 'preclearlo uomo! –