Wordpress 语言永久链接
Wordpress language permalink
我在这里找不到关于如何在 Wordpress 中创建自定义语言永久链接的真正解决方案。
对于翻译,我使用 loco 翻译插件(基本上它是一个 .po、.pot 文件编辑器)
我需要这个结构:
domain.com/
- 主页原语言
domain.com/en/
- 主页英文
domain.com/blog/
- 来自 nl_NL 类别的博客 post 列表
domain.com/en/blog/
- 来自 en_US 类别的博客 post 列表
domain.com/blog/this-is-a-post/
- 博客 post 如果属于 nl_NL 类别
domain.com/blog/en/this-is-a-post/
- 博客 post 如果属于 en_US 类别
.htaccess 不是解决方案,因为博客 post 自定义永久链接
最好的解决方案是这样的:
如果在url之后有/en/,wordpress读取/en/之后的永久链接,而不是在url之后,并发送一个get参数"lang=en_US"
如果没有/en/一切正常
感谢您的帮助!
彼得
终于想出办法了
function filter_post_link($permalink, $post) {
$cat_ID = get_the_category($post->ID)[0]->cat_ID;
if ($post->post_type != 'post')
return $permalink;
if($cat_ID==3){
return 'en'.$permalink;
}else{
return $permalink;
}
}
add_filter('pre_post_link', 'filter_post_link', 10, 2);
function my_add_rewrite_rules() {
global $wp,$wp_rewrite;
$wp->add_query_var('lang');
add_rewrite_rule('^en/?$', 'index.php?lang=en_US', 'top');
add_rewrite_rule('^blog/?$', 'index.php?cat=4', 'top');
add_rewrite_rule('^blog/page/([0-9]+)/?$', 'index.php?cat=4&paged=$matches[1]', 'top');
add_rewrite_rule('^en/blog/?$', 'index.php?lang=en_US&cat=3', 'top');
add_rewrite_rule('^en/blog/page/([0-9]+)/?$', 'index.php?lang=en_US&cat=3&paged=$matches[1]', 'top');
add_rewrite_rule('^en/?([^/]+)/?$', 'index.php?name=$matches[1]&lang=en_US', 'top');
// Once you get working, remove this next line
$wp_rewrite->flush_rules(false);
}
add_action('init', 'my_add_rewrite_rules');
说明:
如果我想使用永久链接而不是普通的 urls.
,我可以使用 add_rewrite_rule()
函数而不是 .htaccess
这个函数的格式和.htaccess非常相似,不需要多解释。
filter_post_link 函数强制 /en/
部分到 url 在 post slug 之前,IF post 类别 id = 3.
一切都很顺利! :)
PS:
如果您想从自定义永久链接中获取值,例如 'lang' 参数,您可以这样做:
$wp_query->query_vars['lang']
我在这里找不到关于如何在 Wordpress 中创建自定义语言永久链接的真正解决方案。
对于翻译,我使用 loco 翻译插件(基本上它是一个 .po、.pot 文件编辑器)
我需要这个结构:
domain.com/
- 主页原语言
domain.com/en/
- 主页英文
domain.com/blog/
- 来自 nl_NL 类别的博客 post 列表
domain.com/en/blog/
- 来自 en_US 类别的博客 post 列表
domain.com/blog/this-is-a-post/
- 博客 post 如果属于 nl_NL 类别
domain.com/blog/en/this-is-a-post/
- 博客 post 如果属于 en_US 类别
.htaccess 不是解决方案,因为博客 post 自定义永久链接
最好的解决方案是这样的:
如果在url之后有/en/,wordpress读取/en/之后的永久链接,而不是在url之后,并发送一个get参数"lang=en_US"
如果没有/en/一切正常
感谢您的帮助!
彼得
终于想出办法了
function filter_post_link($permalink, $post) {
$cat_ID = get_the_category($post->ID)[0]->cat_ID;
if ($post->post_type != 'post')
return $permalink;
if($cat_ID==3){
return 'en'.$permalink;
}else{
return $permalink;
}
}
add_filter('pre_post_link', 'filter_post_link', 10, 2);
function my_add_rewrite_rules() {
global $wp,$wp_rewrite;
$wp->add_query_var('lang');
add_rewrite_rule('^en/?$', 'index.php?lang=en_US', 'top');
add_rewrite_rule('^blog/?$', 'index.php?cat=4', 'top');
add_rewrite_rule('^blog/page/([0-9]+)/?$', 'index.php?cat=4&paged=$matches[1]', 'top');
add_rewrite_rule('^en/blog/?$', 'index.php?lang=en_US&cat=3', 'top');
add_rewrite_rule('^en/blog/page/([0-9]+)/?$', 'index.php?lang=en_US&cat=3&paged=$matches[1]', 'top');
add_rewrite_rule('^en/?([^/]+)/?$', 'index.php?name=$matches[1]&lang=en_US', 'top');
// Once you get working, remove this next line
$wp_rewrite->flush_rules(false);
}
add_action('init', 'my_add_rewrite_rules');
说明: 如果我想使用永久链接而不是普通的 urls.
,我可以使用add_rewrite_rule()
函数而不是 .htaccess
这个函数的格式和.htaccess非常相似,不需要多解释。
filter_post_link 函数强制 /en/
部分到 url 在 post slug 之前,IF post 类别 id = 3.
一切都很顺利! :)
PS: 如果您想从自定义永久链接中获取值,例如 'lang' 参数,您可以这样做:
$wp_query->query_vars['lang']