问题描述

我有一个关于固定链接和重写 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。