向每个可能的URL添加语言/国家/地区代码

时间:2017-06-26 作者:Berend

我一直在尝试实现看似简单的permalink结构定制,但没有成功。我们的目标是/aa-bb/ 在每个可能的permalink前面,其中aa是语言代码,bb是国家代码。之后发生的任何事情都应该像正常情况下一样。所以通常情况下/post-title/, 之后你会/en-gb/post-title/ 它将导致相同的帖子(包括所有变体,如页面、CPT、档案、类别、搜索等)。

The complete flow:

  1. 我生成一个有效语言/国家/地区值列表,如果不存在有效值,我将从URL中检索该值,以确定语言/国家/地区是否完整\\u重定向操作挂钩期间,我将重定向到默认语言/国家/地区如果不存在有效值,我将重定向到默认语言/国家/地区部分不存在=神秘
    1. 所有重写WP permalinks的方法似乎都与此目标略有不同。使用htaccess是否可以更好地做到这一点?WPML似乎用他们的语言代码成功地做到了这一点,但我不知道如何做到。

      使用add\\u rewrite\\u规则当然可以,但一次只覆盖一种永久链接类型,所以如果手动添加所有变体,我担心会达不到要求。

2 个回复
最合适的回答,由SO网友:Ihor Vorotnov 整理而成

我现在正在研究一个类似的解决方案-该网站必须在所有URL中都有语言代码(默认语言除外),但只有页面可以通过WPML/Polylang插件的方式进行翻译。对于新闻(博客),我们只显示特定语言的帖子(它们是独立的,不是彼此的翻译)。所有其他内容以所有语言混合。此外,UI也以URL中的语言集显示。

下面是我为用语言代码预先编写重写规则所做的工作:

function prepend_default_rewrite_rules( $rules ) {

    // Prepare for new rules
    $new_rules = [];

    // Set up languages, except default one
    $language_slugs = [\'ar\', \'ku\'];

    // Generate language slug regex
    $languages_slug = \'(?:\' . implode( \'/|\', $language_slugs ) . \'/)?\';


    // Set up the list of rules that don\'t need to be prefixed
    $whitelist = [
        \'^wp-json/?$\',
        \'^wp-json/(.*)?\',
        \'^index.php/wp-json/?$\',
        \'^index.php/wp-json/(.*)?\'
    ];

    // Set up the new rule for home page
    $new_rules[\'(?:\' . implode( \'/|\', $language_slugs ) . \')/?$\'] = \'index.php\';

    // Loop through old rules and modify them
    foreach ( $rules as $key => $rule ) {

        // Re-add those whitelisted rules without modification
        if ( in_array( $key, $whitelist ) ) {

            $new_rules[ $key ] = $rule;

        // Update rules starting with ^ symbol
        } elseif ( substr( $key, 0, 1 ) === \'^\' ) { 

            $new_rules[ $languages_slug . substr( $key, 1 ) ] = $rule;


        // Update other rules
        } else {

            $new_rules[ $languages_slug . $key ] = $rule;

        }
    }


    // Return out new rules
    return $new_rules;
}
add_filter( \'rewrite_rules_array\', \'prepend_default_rewrite_rules\' );
还没有对其进行全面测试-只是在研究了WP\\U重写类后提出了解决方案。所以这是一项正在进行的工作。希望这能有所帮助。

P、 S:另外,我很高兴看到您的解决方案“我从URL检索值以确定语言/国家=完整”-这就是我目前正在研究的:)

SO网友:Por

我相信你可以polylang plugin. 我做了一个像你提到的插件一样的项目。

结束

相关推荐

Change menu with language?

我的问题是,我使用了一个名为polylang的插件,但现在它与另一个更重要的插件不兼容,所以我需要找到一个解决方案。我在其他网站上使用WPML,这不是一个选项,所以您知道。我已经准备好翻译所有的帖子和页面,我只想使用一个瑞典语菜单和一个英语菜单。permalinks没有任何变化。我在这篇文章中找到了一个解决方案How to change menu according to the language? 但我不能让它工作。不确定帖子是否仍处于活动状态,或者解决方案是否与WP 3.6配合使用,因此我再次请求任何