修改SANITIZE_TITLE_WITH_DASSES函数时出现固定链接错误

时间:2012-08-11 作者:Pam Apple

默认情况下,wordpress会删除要生成的重音符号和奇怪字符post_name 在wp\\U posts表中。当我们将permalink结构更改为/%postname%/ 或一些类似的结构。在我的语言中,我不想删除和替换许多字符,因为它扭曲了含义。

我已经换了sanitize_title_with_dashes wp中的函数包括/格式化为:

函数sanitize\\u title\\u with\\u破折号($title){

$title = strip_tags($title);`
// Preserve escaped octets.
$title = preg_replace(\'|%([a-fA-F0-9][a-fA-F0-9])|\', \'---$1---\', $title);
// Remove percent signs that are not part of an octet.
$title = str_replace(\'%\', \'\', $title);
// Restore octets.
$title = preg_replace(\'|---([a-fA-F0-9][a-fA-F0-9])---|\', \'%$1\', $title);
/*注释掉此代码块

if (seems_utf8($title)) {
    if (function_exists(\'mb_strtolower\')) {
        $title = mb_strtolower($title, \'UTF-8\');
    }
    $title = utf8_uri_encode($title, 200);
}

$title = strtolower($title);
*/

$title = preg_replace(\'/&.+?;/\', \'\', $title); // kill entities
$title = str_replace(\'.\', \'-\', $title);
//注释掉$title=preg\\u replace(\'/[^%a-z0-9 \\-]/\',\'\',\'\',$title);

$title = preg_replace(\'/\\s+/\', \'-\', $title);
$title = preg_replace(\'|-+|\', \'-\', $title);
$title = trim($title, \'-\');

return $title;
}

例如,为我的语言中的所有字符正确生成post\\u名称http://1.todaytravels.info 在最新的帖子中,url非常好,但wordpress根本找不到帖子(它说not found). 我想我需要更改permalink结构中的某些内容,以便WP查询到正确的帖子。

有人知道如何解决这个问题吗?

谢谢你的帮助!

2 个回复
最合适的回答,由SO网友:Roman 整理而成

为什么要在此处更改URI?SEO优化?

URI具有RFC中定义的有限数量的允许字符。这就是WordPress使用utf8_uri_encode 根据posttitle生成永久链接。

您可以在stackoverflow问题中找到更多信息:Which characters make a URL invalid?

编辑我已经检查了wp_insert_post() 中的函数wp-includes/post.php, 在数据库中根据提交的$_POST 大堆这是你的电话sanitize_post() 在线2487 还有一个电话sanitize_title() 在线2548. 您应该检查这两个功能。

另一种选择可能是,在后台启动这些清理功能之一的附加过滤器。您可以使用该函数删除任何过滤器remove_all_filters()

For example:

remove_all_filters(\'sanitize_title\', 99);

SO网友:fuxia

URL中的非ASCII字符必须进行编码。使用rawurlencode() 这样做。

示例:slugöüä 必须编码为%C3%B6%C3%BC%C3%A4.
您仍然可以输入öüä 浏览器会将编码的URL发送到地址栏中的服务器
$_SERVER[\'REQUEST_URI\'] 将是7%C3%B6%C3%BC%C3%A4, $_SERVER[\'REDIRECT_URL\'] 将是öüä.

enter image description here

不要编辑WordPress文件,而是使用过滤器。否则,您将无法再运行更新
在我的插件中Germanix 我陷入\'sanitize_title\', 取第二个参数(原始标题)并更改它。你也应该这样做。

结束

相关推荐

widgetlogic and permalinks

我试图使用widgetlogic在某些页面上有条件地显示菜单。每个菜单都使用如下标记is_page(array(\"Page Name\", \"Page Name 2\" ...)), 在我尝试更改permalinks之前,它一直工作得很好(因此所有菜单都会从各自的页面中消失)。我做错什么了吗?是否有解决方法?