【问题标题】:Wordpress language permalinkWordpress 语言永久链接
【发布时间】:2017-06-26 04:24:51
【问题描述】:

我在这里找不到关于如何在 Wordpress 中制作自定义语言永久链接的真正解决方案。

对于翻译,我使用 loco 翻译器插件(基本上它是一个 .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 不是解决方案,因为博客文章自定义永久链接

最好的解决方案是这样的:

如果url后面有/en/,wordpress会读取/en/后面的永久链接,而不是url后面,并发送一个get参数“lang=en_US”

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

感谢您的帮助!

彼得

【问题讨论】:

  • 听起来您正在寻找一些插件来提供此功能,但您正在寻找一种非常自定义的永久链接模式。除了修改服务器端之外,我不知道该怎么做。为什么自定义 .htaccess 文件是不可能的?您可以轻松创建一个.htaccess 文件,该文件还可以处理博客永久链接。
  • 正如我所说,.htaccess 不是解决方案。使用 post-name-permalink 覆盖 htaccess 规则,我试过了。而且我不想使用插件,我会撒谎以编程方式解决它。

标签: wordpress permalinks


【解决方案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');

说明: 如果我想使用永久链接而不是普通 url,我可以使用 add_rewrite_rule() 函数而不是 .htaccess。

这个函数的格式和.htaccess很像,不用多解释了。

filter_post_link 函数强制 /en/part 在 post slug 之前的 url,如果 post category id = 3。

一切都像魅力一样! :)

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

$wp_query->query_vars['lang']

【讨论】:

  • 非常有趣的方法,感谢分享。你应该把它写在一篇博文之类的文章中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2020-03-16
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多