WordPress通过其sanitize_title_with_dashes()
用破折号替换点的筛选函数。不幸的是,该函数不能让您控制或更改要删除或替换的字符。
然而,我们可以做的是删除该过滤器并添加我们自己的版本,并进行一些修改:
remove_filter( \'sanitize_title\', \'sanitize_title_with_dashes\', 10 );
add_filter( \'sanitize_title\', \'wpse231448_sanitize_title_with_dashes\', 10, 3 );
function wpse231448_sanitize_title_with_dashes( $title, $raw_title = \'\', $context = \'display\' ) {
$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);
if ( \'save\' == $context ) {
// Convert nbsp, ndash and mdash to hyphens
$title = str_replace( array( \'%c2%a0\', \'%e2%80%93\', \'%e2%80%94\' ), \'-\', $title );
// Convert nbsp, ndash and mdash HTML entities to hyphens
$title = str_replace( array( \' \', \' \', \'–\', \'–\', \'—\', \'—\' ), \'-\', $title );
// Strip these characters entirely
$title = str_replace( array(
// iexcl and iquest
\'%c2%a1\', \'%c2%bf\',
// angle quotes
\'%c2%ab\', \'%c2%bb\', \'%e2%80%b9\', \'%e2%80%ba\',
// curly quotes
\'%e2%80%98\', \'%e2%80%99\', \'%e2%80%9c\', \'%e2%80%9d\',
\'%e2%80%9a\', \'%e2%80%9b\', \'%e2%80%9e\', \'%e2%80%9f\',
// copy, reg, deg, hellip and trade
\'%c2%a9\', \'%c2%ae\', \'%c2%b0\', \'%e2%80%a6\', \'%e2%84%a2\',
// acute accents
\'%c2%b4\', \'%cb%8a\', \'%cc%81\', \'%cd%81\',
// grave accent, macron, caron
\'%cc%80\', \'%cc%84\', \'%cc%8c\',
), \'\', $title );
// Convert times to x
$title = str_replace( \'%c3%97\', \'x\', $title );
}
$title = preg_replace(\'/&.+?;/\', \'\', $title); // kill entities
// WPSE-231448: Commented out this line below to stop dots being replaced by dashes.
//$title = str_replace(\'.\', \'-\', $title);
// WPSE-231448: Add the dot to the list of characters NOT to be stripped.
$title = preg_replace(\'/[^%a-z0-9 _\\-\\.]/\', \'\', $title);
$title = preg_replace(\'/\\s+/\', \'-\', $title);
$title = preg_replace(\'|-+|\', \'-\', $title);
$title = trim($title, \'-\');
return $title;
}
我编辑的行用“WPSE-231448”注释-首先,我注释掉了执行
str_replace()
并用破折号替换点,然后我将点添加到
preg_replace()
低于该值的函数。
请注意,我没有用分页或类似的方法对此进行测试,它只是阻止了点从前端/后端的段塞中剥离,因此可能产生的任何问题都需要相应地处理。