Vik*_*eta 5 php wordpress url-rewriting
我知道这个问题已经被问过很多次了,但是我没有找到可以用来解决问题的有效解决方案或示例。
我一直在客户端站点上工作。有两个类似的网站,一个针对自己的国家,第二个针对其他国家的游客。
他们的主站点托管在服务器的根目录中,第二个站点托管在子文件夹中。
现在,我想要的是第二个站点的动态URL重写,该站点托管在带有访问用户国家代码的子文件夹中。
例如
http://example.com
http://example.com/subfolder/
是网址。
我希望http://example.com/subfolder/将其更改为通过php函数获取ISO格式的访客国家代码的http://example.com/country_code/地方country_code。
因此,如果用户来自美国,则subfolder必须将其更改为us,新网址应为now 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中提供的功能来实现此目的。
您可以通过基于用户国家/地区 ISO 代码的过滤器假装重写规则来实现此目的。请在下面找到代码。
function prepend_default_rewrite_rules( $rules ) {
// Prepare for new rules
$new_rules = [];
// Set up languages, except default one, get user language code
$user = get_current_user_id();
$language_slugs = (array) get_user_meta($user->ID, 'country_code');
// 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' );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |