问题描述
我有一个关于固定链接和重写 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;
}
您的永久链接将如下所示:
我知道这并不完全符合你的要求,但是这种方法可以让 WordPress 的这种方式更为简单。
参考:http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。