使用PHP在WordPress中使用国家代码动态重写子文件夹

时间:2017-07-05 作者:Vikas Khunteta

我知道这个问题已经被问了很多次了,但我没有找到任何有效的解决方案或例子来解决我的问题。

我一直在一个客户网站上工作。有两个类似的网站,一个是本国网站,另一个是其他国家的游客网站。

他们的主站点位于服务器的根目录中,第二个站点位于子文件夹中。

现在我想要的是第二个站点的动态url重写,该站点托管在子文件夹中,带有访问用户的国家/地区代码。

例如:。

http://example.com
http://example.com/subfolder/

是URL。

我想要这个http://example.com/subfolder/ 改成这个http://example.com/country_code/ 哪里country_code 是通过php函数获得的ISO格式的访客国家代码。

所以如果用户来自United States 这个subfolder 必须更改为us, 新url现在应为http://example.com/us/.

我希望这能适用于所有类型的页面,无论是页面、帖子、类别、标签还是作者页面。

所以再说一遍,http://example.com/subfolder/any-type-of-url/ => http://example.com/country_code/any-type-of-url/

回想起country_code 是ISO格式的用户/访客国家代码。

如果有人需要更多信息,请告诉我。提前谢谢。

PS:我尝试使用add_rewrite_rule() WP中可用的功能。

1 个回复
SO网友:dbeja

我认为最困难的部分是从两个地方的Wordpress网站的url中删除子文件夹部分。

如果您将子文件夹名称更改为“国际”,并将重写规则更改为在URL之前有ISO代码,该怎么办?

所以你会:

要添加iso代码,请尝试自己使用rewrite_rules_array 过滤或仅使用翻译插件,如Polylang 它已经自动将这些代码添加到url,甚至可以进行浏览器语言检测。

要自己做,我会这样做:(非常基本的例子)

function add_iso_codes_to_url( $rules ) {

    $new_rules = [];

    $iso_codes = \'(?:us/|uk/)?\';

    // home page
    $new_rules[$iso_codes . \'/?$\'] = \'index.php\';

    // Change other rules
    foreach ( $rules as $key => $rule ) {

        if ( substr( $key, 0, 1 ) === \'^\' ) { 

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

        } else {

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

        }
    }

    return $new_rules;
}
add_filter( \'rewrite_rules_array\', \'add_iso_codes_to_url\' );

结束

相关推荐

插件会覆盖其他插件的存档-.php文件

我在一家轮胎公司工作,正在编写两个插件。第一个插件是显示合金车轮。第二个插件是显示轮胎。这两个插件都是定制的post类型“wheels”和“tires”,并且都有一个模板逻辑(templates/archive-wheels.php和templates/archive-tires.php)My problem:当两个插件都处于活动状态时wheels 插件覆盖tires 我不知道它究竟为什么要这样做。我确实尝试过通过使用其他函数名、其他前缀等来避免名称空间冲突。以下是注册两个插件的CPT和模板逻辑的相关代码