我有一个关于永久链接和重写url的问题。我正在编写一个翻译插件,我想在我的url中添加语言快捷码(类似http://eyewebz.com/EN/other_permalinks). 目前,我正在分配一个$\\u Session-variable来保存当前选定的语言,但这对用户来说并不是真正可见的。
我可以用下面的代码重写url,但更改url后,页面不会显示任何内容,全局$post变量完全为空。代码如下。
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);
如果有人能在wy的路上帮我做这件事,我将不胜感激!
提前感谢!
最合适的回答,由SO网友:Brian Fegter 整理而成
我知道,没有一种好的方法可以预先编写一个带有URI基的永久链接,同时让WordPress满意。但是,您可以使用将语言添加到URI的末尾add_rewrite_endpoint()
;
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;
}
您的永久链接如下所示:
- http://domain.com/page-name/en
- http://domain.com/page-name/sp我知道这并不是你想要的,但这是与WordPress争论这种方法的最简单的方法。
参考号:http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint