問題描述

我有一個關於固定連結和重寫 url 的問題。我正在編寫一個翻譯外掛,我想在我的網址中新增語言短碼 (類似於 http://eyewebz.com/EN/other_permalinks) 。目前,我正在分配一個 $ _Session-variable 來儲存當前選定的語言,但這並不是真正可見的使用者。

我可以使用下面的程式碼重寫 URL,但在更改 url 後,該頁面不顯示任何內容,並且全域性 $ post-variable 完全為空。程式碼如下。

function alter_link_language($permalink)
{
    $active_language = get_user_selected_language();
    $current_language_shortcode = strtoupper( $active_language["shortname"] );

    $permalink = str_replace(get_bloginfo('home'), '', $permalink);
    return get_bloginfo('home') . '/' . $current_language_shortcode . $permalink;
}
add_filter('post_link', 'alter_link_language', 10);
add_filter('page_link', 'alter_link_language', 10);

如果有人可以用這個方式幫助我,這將是非常感謝!

提前致謝!

最佳解決方案

沒有一個很好的方法來新增一個我所知道的 URI 基礎的永久連結,同時保持 WordPress 的快樂。然而,您可以使用 add_rewrite_endpoint()將語言新增到 URI 的末尾;

add_action('init', 'foobar_rewrite_tag');
function foobar_rewrite_tag(){
     $languages = array('en', 'sp'); // Probably have this sourced from your plugin options
     foreach($languages as $language)
         add_rewrite_endpoint( $language, EP_PERMALINK | EP_PAGES);
}

您可以在模板中使用一個簡單的 getter 函式:

function get_language_code(){
    global $wp_query;
    $languages = array('en', 'sp'); //Source this from your plugin options
    foreach($languages as $language)
        if(isset($wp_query->query_vars[$language])) //Note this will not have a value assigned, so we check if it's set to determine the language
             return $language;
}

您的永久連結將如下所示:

  1. http://domain.com/page-name/en

  2. http://domain.com/page-name/sp

我知道這並不完全符合你的要求,但是這種方法可以讓 WordPress 的這種方式更為簡單。

參考:http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。