Wordpress语言永久链接

时间:2017-02-08 13:54:30

标签: wordpress permalinks

我无法在这里找到一个真正的解决方案,如何在Wordpress中制作自定义语言永久链接。

对于翻译我使用loco translater插件(基本上它是.po,.pot文件编辑器)

我需要这个结构:

domain.com/ - 首页原语

domain.com/en/ - 主页英文

domain.com/blog/ - 来自nl_NL类别的博客帖子列表

domain.com/en/blog/ - 来自en_US类别的博客文章列表

domain.com/blog/this-is-a-post/ - 博客文章,如果它在nl_NL类别

domain.com/blog/en/this-is-a-post/ - 博客文章,如果它在en_US类别

.htaccess不是解决方案,因为博客帖子定制永久链接

最好的解决方案是:

如果在网址后面有/ en / right,wordpress会在/ en /之后读取永久链接,而不是在网址之后,并发送get参数“lang = en_US”

如果没有/ en /一切正常。

感谢您的帮助!

彼得

1 个答案:

答案 0 :(得分:1)

最后,我找出了解决方案。

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');

说明: 如果我想使用固定链接而不是普通网址,我可以使用add_rewrite_rule()函数而不是.htaccess。

此函数的格式与.htaccess非常相似,不需要更多解释。

filter_post_link函数在post slug之前强制/en/部分为url,IF post category id = 3.

一切都像魅力一样! :)

PS: 如果您想从自定义永久链接中获取值,例如'lang'参数,您可以这样做:

$wp_query->query_vars['lang']