如何使 WordPress 永久链接忽略自定义 url 重写

2023-12-30

我目前正在开发一个 WordPress 网站,该网站需要提供法语版本。当我添加查询字符串变量时,我找到了一种使主题与 fr_FR po 和 mo 文件一起使用的方法l. i.e.

site.tld将产生普通的英语网站,而site.tld/?l=fr将激活我的functions.php中的以下代码以提供法语翻译:

<?php
// http://codex.wordpress.org/Plugin_API/Filter_Reference/locale
add_filter( 'locale', 'set_my_locale' );
function set_my_locale( $lang ) {
    if ("fr" == substr(strtolower(trim(strip_tags(stripslashes($_GET['l'])))), 0, 2)) {
        // set language to french
        return "fr_FR";
    } else {
        // return original locale
        return $lang;
    }
}
?>

这个设置已经可以工作了。我的问题是:我如何重写网址而不是site.tld/?l=fr我可以在文件夹结构前面添加fr i.e. site.tld/fr/?

就像有一个页面一样site.tld/portoflio/autumn/用英语讲,site.tld/fr/portfolio/autumn/会吐出法国的。我从苹果网站得到了这个想法,其中语言总是预先添加到文件夹结构中。

我已经可以通过 htaccess 中的外部重定向来实现这一点:

RewriteBase /
RewriteCond ^[a-z]{2}/
RewriteRule ^([a-z]{2})/(.*)$ /$2?l=$1 [R,L]

这有效,但是一旦我删除了R标记它服务于法语翻译的 404 未找到不是。我猜我所做的是搞乱了 WordPress 的重写规则,因为我需要使用漂亮的永久链接。现在我准备使用Month and name (/%year%/%monthnum%/%postname%/)在管理常规选项中。

我的问题是,如何让 wordpress 忽略/fr/部分并仍然提供正确的页面/帖子/等?

这可能吗?我在正确的轨道上吗?我需要你的帮助,尤其是做明智的事情,而不仅仅是做美好的事情。我试过这个http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api但对于我的一生来说,我无法让它发挥作用。 :/


UPDATE:好的,下面是从@relu 得到的一些进展:

我确保我的规则已被取消.htaccess

然后我添加了 @relu 的规则,但方式如下,因为 Relu 总是将我发送到相同的地址,而无需/fr:

<?
    // http://pmg.co/custom-wordpress-shortlinks
    add_action( 'init', 'pmgtut_add_rewrites' );
    function pmgtut_add_rewrites() {
        add_rewrite_rule( '^([a-z]{2})/?$', 'index.php?l=$matches[1]', 'top' );
        add_rewrite_rule( '^([a-z]{2})/(.*)$', 'index.php?l=$matches[1]&q=$matches[2]', 'top' );
    }
    add_filter( 'query_vars', 'pmgtut_query_vars', 10, 1 );
    function pmgtut_query_vars( $vars ) {
        $vars[] = 'l';
        return $vars;
    }
?>

now the /fr保留在地址栏中,所以这是一件好事,但仍然存在两个问题:

  1. wordpress 正在为我提供主索引页面。似乎没有使用&q=$matches[2]规则的一部分;和

  2. 区域设置仍然没有正确设置。我检查了变量是否l正在吃饱,所以我添加了echo 'l: $l'; after $l = get_query_var('l');有趣的是我得到了两个回声:一l:和另一个l: fr就在那之后。是个locale过滤器运行两次?似乎第一次它没有看到 queryvar 的值,然后似乎第二次它输出l: with fr已经在那里了..在一天结束时,区域设置仍然没有改变。

啊啊帮助。


最终更新:在我最后一次沮丧中我再次搜索,找到了这个插件 qtranslate。做我需要的。谢谢你们,特别是@relu 的史诗般的努力和保持力量。


将其添加到您的functions.php中

add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp_loaded','my_flush_rules' );

// flush_rules() if our rules are not yet included
function my_flush_rules(){
    $rules = get_option( 'rewrite_rules' );

    if ( ! isset( $rules['^([a-z]{2})/(.*)$'] ) ) {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules['^([a-z]{2})/(.*)$'] = 'index.php?l=$matches[1]&q=$matches[2]';
    return $newrules + $rules;
}

// Adding the l var so that WP recognizes it
function my_insert_query_vars( $vars )
{
    array_push($vars, 'l');
    return $vars;
}

还没有测试过,它可能需要一些调整,但这就是做到这一点的方法。

我基本上已经调整了找到的版本here http://codex.wordpress.org/Class_Reference/WP_Rewrite.

它还注册了“l" 查询 var,这样你就可以通过调用来获取它的值:获取查询变量 http://codex.wordpress.org/Function_Reference/get_query_var

add_filter( 'locale', 'set_my_locale' );
function set_my_locale( $lang ) {
    $l = get_query_var('l');

    if ("fr" == $l) {
        // set language to french
        return "fr_FR";
    } else {
        // return original locale
        return $lang;
    }
}

UDATE:忽略以上!


去除my_insert_query_vars()过滤并将其替换为:

function register_rewrite_tag() {
        add_rewrite_tag('%l%', '([a-z]{2})');
}
add_action('init', 'register_rewrite_tag'); 

这里还有页面和帖子的更新重写,我看过 WordPress'$wp_rewrite->rules并对它们进行了调整以适应这种特殊情况:

function pmgtut_add_rewrites() {
        add_rewrite_rule( '^([a-z]{2})/?$', 'index.php?l=$matches[1]', 'top' );
        add_rewrite_rule( '^([a-z]{2})/(.?.+?)(/[0-9]+)?/?$', 'index.php?l=$matches[1]&pagename=$matches[2]&page=$matches[3]', 'top' ); // Pages
        add_rewrite_rule( '^([a-z]{2})/([^/]+)(/[0-9]+)?/?$', 'index.php?l=$matches[1]&name=$matches[2]&page=$matches[3]', 'top' ); // Posts
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 WordPress 永久链接忽略自定义 url 重写 的相关文章

随机推荐

  • Python 中的顶级语句是什么?

    在 Python 指南的章节中项目结构 http docs python guide org en latest writing structure html中 高层声明 一词被多次提及 我不确定这到底指的是什么 我的猜测是 在加载模块后立
  • 迄今为止的字符串有时完整的日期存在有时我只在java中得到年份

    因此 我正在解析 json 有时我收到的包含日期的字符串已满 dd mm yyyy 有时我只收到 yyyy 我似乎无法将其转换为日期 所以如果有人可以提供帮助 根据您的业务需求 您可以使用以下命令将月份和日期默认为所需值DateTimeFo
  • 将 gitlab wiki 镜像到 github

    我们正在私有 GitLab 服务器上开发一个软件 外部没有人可以访问此服务器 现在我们必须以某种方式让我们的软件可供所有人使用 我们的想法是将存储库镜像到 GitHub 根据我们所做的一些研究 这应该是可能的 我们还在 GitLab 中维护
  • 如何将多维数组分配给临时变量?

    我想将静态分配的多维数组分配给临时变量 考虑以下示例 void foo int b 3 2 b 1 1 1 no segmentation fault int main int a 3 2 1 2 11 12 21 22 foo a int
  • Rails 应用程序在 Heroku 上失败:(没有路线匹配 [GET]“/”)

    Rails 和 Heroku 的新手 我正在尝试按照以下中的分步说明部署一个简单的应用程序导轨教程 http ruby railstutorial org ruby on rails tutorial book sec heroku ste
  • 使用 jQuery Deferred 进行错误处理和恢复

    我正在使用 jQuery 并且知道这个问题是因为 jQuery Deferred 实现不符合 Promises A 标准 我不想使用任何其他库来解决这个问题 有了这个 有没有办法从 Deferred fail 回调使我返回到成功链 这可以通
  • QWebInspector 无法正常工作

    我已将 QWebInspector 包含在我的 QT 项目中 并尝试在我的代码中使用它 不完全确定如何使用 因为我对 QT 还很陌生 我得到一个空白的 Web Inspector 屏幕 所以我认为 page 返回 null 我哪里出错了还是
  • 替换特殊字符(破折号)

    我试图用以下方法替换我认为的标准破折号gsub 我正在测试的代码是 gsub ABC reported estimate 但这没有任何作用 我将破折号复制并粘贴到http unicodelookup com 1 http unicodelo
  • Express:提供预压缩的静态资源

    我想预压缩我的静态资产 不包括图像 并为它们提供服务 服务于public文件夹 我有 app use express static path to public 我相信express compress 动态压缩 这似乎对静态资源的服务器 C
  • 数据表列中的逗号和 $

    我有一个包含 4 列的数据表 其中包含货币 目前 我将它们视为普通列 并手动将 附加到每个值 现在我需要将列格式化为包含逗号 有没有插件可以做到这一点 我还想删除手动添加 值 我检查了几个网站 但我真的不明白它们是如何工作的 更新答案以使用
  • 如何向 R 中的 data.frame 添加文档?

    我已经使用 R 一段时间了 我意识到如果您可以附加 data frame 中包含的描述数据 将会有很大帮助 因为您可以在 Rdata 文件中收集所有有用的研究信息 我想添加到我的数据帧信息 就像 iris 显示的信息 描述 iris 数据帧
  • 如何使用 OpenAPI-3.0 表达 JSON-API 稀疏字段集

    我正在为我的 API 实现 OpenAPI 3 0 规范 并且我计划使用稀疏字段集 https jsonapi org format fetching sparse fieldsets作为 GET 的参数 的例子参数 https githu
  • 如何在 Android 中更改 ProgressDialog Spinner 颜色? [复制]

    这个问题在这里已经有答案了 我正在尝试添加自定义的ProgressDialog to my Activity 我成功更改了ProgressDialog字体和背景颜色 但我不知道如何在不使用小部件的情况下更改微调器颜色 谁能帮我 这是我的Ac
  • 是否可以让 Ingress 指向另一个命名空间中的服务?

    我想做的是在default我的其他命名空间中的命名空间和入口指向该服务 我尝试实现如下所示的服务和 Ingress 但没有成功 kind Service apiVersion v1 metadata name serviceX namesp
  • deviceready 处理程序未被调用 ios PhoneGap 3.3.3

    索引 html Phonegap 3 3 3 设备就绪处理程序未被调用 确保您已在 html 中包含phonegap js 或co
  • 为什么类成员的名称不能与其嵌套类之一相同?

    或者为什么以下是不可能的 class Material class Keys Material Keys Keys get set Illegal 我没有看到任何可能的歧义 当被实例访问时 返回该属性 静态访问时 返回类 或者我错过了什么
  • 红宝石中的位敲击

    我想创建一个位 其中包含给定用户的安全权限 在 C 中 我会通过创建一个枚举来完成此操作 然后我会对二进制值进行一些操作 通过与 来查看它是否会产生 TRUE 值 我怎样才能在 Ruby 中做到最好 如果底层值很重要 那么您可以创建一个像枚
  • 作业:使用指针创建数组

    我有一个家庭作业问题正在解决 我和其他一些学生很确定我们的老师说错了 但也许没有 我已经检查了这里的一些问题 并且无法真正找到一种使用指针来创建本质上是数组的方法 说明如下 重写以下程序以使用指针而不是数组 代码是这样的 int main
  • macOS 文档图标模板? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 下面最初的问题已经被时间所取代 现在 您不再需要为文档提供图标或图标集 因为 macOS 将从您的应用
  • 如何使 WordPress 永久链接忽略自定义 url 重写

    我目前正在开发一个 WordPress 网站 该网站需要提供法语版本 当我添加查询字符串变量时 我找到了一种使主题与 fr FR po 和 mo 文件一起使用的方法l i e site tld将产生普通的英语网站 而site tld l f