我正在为客户提供双语网站,英语/法语。我使用qTranslate插件的内容,这是很好的。但是,客户端要求将URL翻译成法语。
http://englishdomain.com/users
http://frenchdomain.com/utilisateurs
在上面的示例网址中,“utilisateurs”需要在管理员中使用与“用户”相同的页面。我已经支持englishdomain.com和frenchdomain.com工作......当页面名称为'utilisateurs'时,我只需要找到告诉wordpress使用'users'页面的方法。
这个网站有很多部分,所以我在考虑设置一个所有英语=>的数组。法国比赛,然后从那里验证。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
有趣的目标。 url实际上是基于页面slug创建的,这是单数...所以没有简单的方法/users/
与/utilisateurs/
。或者至少不是本土方式。
您可以做的最好的事情是使用WordPress的网址重定向方法并搜索手动配置的英语=>法语页面slugs数组。
就在我的脑海中,generate_rewrite_rules
可能是一个很好的动作挂钩,可以为初学者留意。
另一种可能性是挂钩query_vars
过滤器并手动替换任何法语页面slugs与他们的英语等价物。然后您的法语URL应该在WordPress数据库中查询与英文URL完全相同的页面。你只需要确保数据库中存在英文slug,否则你会遇到问题。
未经测试 示例
诀窍是挂钩到WordPress的查询系统并动态地替换部分查询。所以让我们说你从这样的数组开始(我只有一个因素,因为我不会说法语):
$translations = array(
'utilisateurs' => 'users'
);
现在我们需要一个函数,它将接受一个法语字符串并返回其英语等价物:
function translate_slug( $french ) {
if( in_array( $french, array_keys( $translations ) ) {
return $translations[$french];
}
return $french
}
接下来,我们挂钩到query_vars
过滤器并用所需的英语等价物替换我们的页面slug变量:
function filter_french_slugs() {
global $wp_query;
$wp_query->query_vars['pagename'] = translate_slug( $wp_query->query_vars['pagename'] );
$wp_query->query_vars['name'] = translate_slug( $wp_query->query_vars['name'] );
}
add_filter( 'pre_get_posts', 'filter_french_slugs' );
这应该会为你转换一些东西,但正如我上面说的那样,未经测试到目前为止......只是想知道你如何能够解决这个问题。
答案 1 :(得分:0)
这很棘手。你可以看一下像WPML这样的插件,但我认为它们中的任何一个都不会做你想要的。
探索的一种可能性是使用Urban Giraffe的Redirection插件:
http://urbangiraffe.com/plugins/redirection/
可以使用“传递”操作来执行您想要的操作。您必须为每个页面定义重定向规则,但它应该可以解决问题。
答案 2 :(得分:0)
试用qTranslate slug with widget插件。
它在编辑页面添加了一个 qTranslate Slug翻译小部件,允许您为每种语言指定一个单独的slug。
据我所知,它仅适用于帖子和页面,不适用于分类法或自定义帖子类型。
答案 3 :(得分:0)
一种方法是在wp_query设置值(pre_get_posts)之前捕获请求;和/或在wp_query对象中覆盖它。
这适用于全局变量$ _REQUEST并覆盖wp_query参数,我不用原始对象$ wp_query-> get('param');
检查实施例: 注意:相反使用全局对象,最好的选择是将WP_Query对象传递给函数并返回它。 参见Codex,wp_query通过引用传递(http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts)。
function filter_french_slugs(WP_Query $query) {
// Don't forget sanitize $_REQUEST params, for safety. Eg. array_map()
// Your request param (example post_type):
$original_post_type = translate_slug($_REQUEST['my_localized_post_type']);
// Or gettext
$original_post_type = __($_REQUEST['my_localized_post_type']); // Sanitize this param
// XXX The most important:
$query->set('post_type', $original_post_type);
// You can also work through an array of all query_vars
// XXX Important
return $query;
}
add_filter('pre_get_posts', 'filter_french_slugs');