//问题
我需要Wordpress停止在其子句/永久链接中将下划线变成连字符。
//情况
将旧站点移至全新的Wordpress安装。旧网站的网址中使用下划线。我们目前需要保留包含下划线的旧网址(请不要在此处建议任何SEO建议,谢谢)。
Wordpress清理了它的段符/永久链接。下划线变成连字符。
我希望在我的代码中同时使用下划线和连字符。我不希望完全用另一种替代,这是我发现的大多数建议/解决方案的根源。
不符合我的标准的解决方案示例:
https://wordpress.stackexchange.com/questions/78334/convert-hyphen-to-underscore-in-permalinks
允许点使用的解决方案示例:
https://wordpress.stackexchange.com/questions/231448/how-to-add-dot-in-post-slug
//我尝试过的东西
我已经搜索了一种解决方案,但找不到令人满意的解决方案。假定使用sanitize_title_with_dashes函数在/wp-includes/formatting.php中定义了对段符/永久链接的清除。
我在此处粘贴了与清理相关的代码:
我只能看到目标下划线是:
$title = preg_replace( '/[^%a-z0-9 _-]/', '', $title );
出于测试目的,我从该行中删除了下划线,替换了服务器上的formatting.php,并尝试再次将下划线放入。但是它什么也没做。我也只是根据前面提到的“永久链接中的允许点”链接才知道,该行应该允许在URL中加下划线。
这也适合注释内容“ *将输出限制为字母数字字符,下划线(_)和破折号(-)。“
所以...这段代码是说,下划线是允许的(在条/永久链接中?),但在我的条/永久链接中仍然删除了下划线。
有人能在这里看到我看不到的东西吗?还是建议使用一个过滤器,该过滤器可以在子段/永久链接中同时包含下划线和连字符?现在我被卡住了。
谢谢您愿意提供的任何帮助。
Google将-视为单词分隔符,而不是_。您会伤害自己,这是100%正确的。 :)但是,如果您仍在寻找解决方案,这里就是答案。
查找以下文件:wp-includes/formatting.php
跳到sanitize_title_with_dashes
功能。您将在以下代码中找到此部分:
$title = strtolower($title);
$title = preg_replace('/&.+?;/', '', $title); // kill entities
$title = str_replace('.', '-', $title);
$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
$title = preg_replace('/\s+/', '-', $title);
$title = preg_replace('|-+|', '-', $title);
$title = trim($title, '-');
将所有下划线/连字符(-)
换成下划线(_)
,如下所示:
$title = strtolower($title);
$title = preg_replace('/&.+?;/', '', $title); // kill entities
$title = str_replace('.', '_', $title);
$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
$title = preg_replace('/\s+/', '_', $title);
$title = preg_replace('|-+|', '_', $title);
$title = trim($title, '_');
请注意,您在此更改之前创建的所有依赖%postname%
永久链接结构标记的帖子都将被破坏。
在这种情况下,您需要返回并重新发布这些帖子,以便将破折号替换为下划线。或者只是编写一些SQL来代替它们。另外,一旦您更新了Wordpress,就需要重新执行此操作。希望对您有所帮助。