首页 > 解决方案 > WordPress 重写多语言页面的 URL

问题描述

我正在尝试创建一个多语言文字新闻网站。这是我的 .htaccess 文件信息

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|hn|ta)/(.*)$ /$1 [L,P]
RewriteRule . /index.php [L]

情况将是 http://website-url/en/home并且http://website-url/hn/home应该http://website-url/ta/home 指向http://website-url/home。我查找了很多文章,但找不到任何解决方案。

谢谢。

标签: wordpressapache

解决方案


让我们试试下面的代码也许它会解决你的问题

function lang_support() {
    return array('en','fr'); // Add your support lang-code (1st place is a default)
}

function rewrite_lang(){
    $langs = lang_support();
    foreach($langs as $lang) {
        add_rewrite_endpoint($lang,EP_PERMALINK|EP_PAGES|EP_ROOT|EP_CATEGORIES);
    }
}
add_action('init','rewrite_lang');

function lang(){
    global $wp_query;
    $langs = lang_support();
    $lang_r = "";
    foreach($langs as $lang) {
        if(isset($wp_query->query_vars[$lang])) {
            $lang_r = $lang;
            $_SESSION['lang'] = $lang_r;
        }
    }
    if(in_array($lang_r,$langs)) {
        return $lang_r;
    } else {
        return $langs[0];
    }
}

function init_session(){session_start();}
add_action('init','init_session',1);

function lang_session() { // Redirect by JS if session is set
    $url_lang= basename($_SERVER['REQUEST_URI']);
    if(!in_array($url_lang,lang_support()) && isset($_SESSION['lang'])) {
        if(!is_404()) {
          wp_redirect(currentURL().$_SESSION['lang'],301);
          exit;
        }
    }
}
add_action('wp_head','lang_session');

function output_buffer() {ob_start();}
add_action('init','output_buffer');

function currentURL() {
    $pageURL=(@$_SERVER["HTTPS"]=="on")?"https://":"http://";
        if($_SERVER["SERVER_PORT"]!="80"){
            $pageURL.=$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
        }else{
            $pageURL.=$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        }
        return $pageURL;
}

将此代码添加到functions.php. 添加代码后,转到wp-admin/options-permalink.php并按保存更改

因此,现在您可以检查/使用模板中的语言代码,例如...

<?php echo lang();?>

或者if( lang() === "en" )

带有我的示例代码的示例工作 URL:

http://example.org/ <-- "en"
http://example.org/en/ <-- "en"
http://example.org/fr/ <-- "fr"
http://example.org/es/ <-- "en" (coz , "es" code not set)

http://example.org/mypage/ <-- "en" (work with "page")
http://example.org/mypage/fr/ <-- "fr"
http://example.org/mypage/es/ <-- "en" (coz , "es" code not set)
http://example.org/mypost/ <-- "en" (work with "post")
http://example.org/mypost/fr/ <-- "fr"
http://example.org/mypost/es/ <-- "en" (coz , "es" code not set)

推荐阅读