gpt4 book ai didi

php - 在WordPress i18n项目中,通过变量触发内部链接添加前缀

转载 作者:行者123 更新时间:2023-12-04 11:41:36 27 4
gpt4 key购买 nike

我们正在 WordPress 中开展本地化项目。事实上,我们可以正确添加具有语言支持的事件浏览器 URL。我将在下面添加详细信息和整个代码。别担心,我的问题不会这么开放,我会说得更具体。

步骤 1

首先,我们应该在链接结构中添加一个变量到WordPress算法中。

function custom_rewrite_basic_query_vars( $query_vars ){
$query_vars[] = 'lang';
return $query_vars;
}
add_filter( 'query_vars', 'custom_rewrite_basic_query_vars' );

因此,WordPress 检测到诸如 ?lang= 之类的变量。并将其包含在查询机制中。

步骤 2

使用“add_rewrite_rule”函数,需要添加变量 ?lang= 在 WordPress 的持久链接结构的后台运行。

简单示例:
/*
LANG PREFIX + INDEX = localhost/en/ = localhost/?lang=en
*/

add_rewrite_rule(
'^(en|fr|de|ru|tr)/?$',
'index.php?lang=$matches[1]',
'top'
);

我不会一一添加剩余的实例,因为您应该使用接近 20 个重写规则。 (日期、类别、评论、页面、文本、分页等)

注意:从事此类项目并希望使用这些规则的人员将根据要求添加它。

现在我们的持久连接结构支持语言选项的变量。
localhost/en/hello-world

localhost/ru/hello-world

localhost/de/04/07/2019

localhost/fr/page/2

等等你能想到的所有链接。

第 3 步

如果从浏览器中检测到变量(例如:lang = en),我们将显示之前保存的跨语言翻译的内容。

在这一点上,我们不需要任何支持。但是当我们到达第 4 步时,我们被卡住了。

第四步

激活之前添加的前缀语言变量,用户在使用站点内的链接时,在所有站点内导航链接上。

这意味着,如果用户有权访问 localhost/fr/hello-world链接,他们必须到达 localhost/fr/contact当他们返回主页时链接或单击联系链接。

为此,您需要将浏览器中当前处于事件状态的语言前缀添加到所有站点内链接。

不幸的是,这是我们闲逛的唯一地方,我们找不到解决方案。

事实上,在写到这里之前,我们尝试了大多数事情。 (当然在我们的知识范围内)。我们甚至查看了提供某种语言支持的插件。

例如 < WP Multilang >

当然,它是如此复杂,代码如此之多。我们甚至不了解插件。

当然,这样做是有逻辑的,我希望那个人看到这篇文章和答案。真诚地感谢大家的支持。

一步一答

过了一会儿,我到达了以下代码并确认它工作正常。
<?php

function link_fn( $url ){

$lang = get_query_var('lang', false);

if( $lang !== false && strpos( $url, $lang ) !== false )
$url = $url . $lang . '/';

return $url;
}

add_filter( 'shortcut_link', 'link_fn' );
add_filter( 'post_link', 'link_fn' );
add_filter( 'page_link', 'link_fn' );
add_filter( 'post_type_link', 'link_fn' );
add_filter( 'attachment_link', 'link_fn' );
add_filter( 'term_link', 'link_fn' );
add_filter( 'author_link', 'link_fn' );
add_filter( 'post_type_archive_link', 'link_fn' );
add_filter( 'day_link', 'link_fn' );
add_filter( 'month_link', 'link_fn' );
add_filter( 'year_link', 'link_fn' );

但是在这一点上,我遇到了一个问题。这里我们得到类似“ localhost/hello-world/[LANG]/”的数据。

我想要的是“ localhost/[LANG]/hello-world”。

要解决这种情况,您必须向现有 URL 结构添加 REGEX 查询,如果它不包含 LANG,请将语言代码添加到 BASE URL。由于应添加 REGEX 查询,我无法执行此操作...

我不想回答我自己的问题并确认。除了我上面写的代码之外,如果有包含我想要的查询的答案,我会将其标记为答案。

回答
function link_fn( $url ){

$lang = get_query_var('lang', false);

$site_url = get_option('home');

if( $lang !== false )
{
$new_url = str_replace( $site_url, "", $url );

if( preg_match('/\b$lang\b/', $new_url) !== false )
{
$url = $site_url."/".$lang.$new_url;
}

}

return $url;
}

add_filter( 'home_url', 'link_fn' );

最佳答案

你走得很远。很不错的努力

我明白你和胜利之间的关系只是改变结果链接结构?

如果是,这里有一个解决方案:

function link_fn($url){

$lang = get_query_var('lang', false);
$url_parts = explode('/', $url);

if ( $lang && in_array($lang, $url_parts) === false) { // lang does not exists in URL
array_splice($url_parts, 1, 0, $lang);
}
$url = implode('/', $url_parts);
return $url;

}

关于php - 在WordPress i18n项目中,通过变量触发内部链接添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860345/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com