admin管理员组文章数量:1122846
How can I make a link like this?
the "Using_Permalinks" part, A is Capital letters. But WP automatically convert upper case to lower case.
I'm trying to convert an old site that made by only html to a WP platform site. Some links to the site look like this:
The site is already indexed by SEO. so I don't want to lose SE rankings.
Thanks for reading this, and hope somebody will be able to shed some light on it...
How can I make a link like this?
http://www.lifecellskin.us/Dev/About
the "Using_Permalinks" part, A is Capital letters. But WP automatically convert upper case to lower case.
I'm trying to convert an old site that made by only html to a WP platform site. Some links to the site look like this:
http://www.lifecellskin.us/About
The site is already indexed by SEO. so I don't want to lose SE rankings.
Thanks for reading this, and hope somebody will be able to shed some light on it...
Share Improve this question edited Jan 11, 2011 at 7:36 Jan Fabry 30.5k4 gold badges90 silver badges136 bronze badges asked Dec 8, 2010 at 6:27 shalushalu 4693 gold badges7 silver badges14 bronze badges6 Answers
Reset to default 9The page URLs are defined by the slugs, and by default they are formatted and lower-cased by the function sanitize_title_with_dashes()
. However, this function is called via a filter, and you can unhook the filter so it doesn't get called:
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );
Just doing this is probably not a good idea, as it will not remove the spaces and other weird stuff in the slug. I suggest you copy the existing function, remove the part that lowercases it, and hook it up again:
add_filter( 'sanitize_title', 'wpse5029_sanitize_title_with_dashes' );
function wpse5029_sanitize_title_with_dashes($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);
$title = remove_accents($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);
// Keep upper-case chars too!
$title = preg_replace('/[^%a-zA-Z0-9 _-]/', '', $title);
$title = preg_replace('/\s+/', '-', $title);
$title = preg_replace('|-+|', '-', $title);
$title = trim($title, '-');
return $title;
}
I'd really recommend that you stick with the lowercase URLs for your site that WordPress uses (I consider that lowercase URLs are a best practice anyway) but that you set up 301 redirects for all the URLs for which you have this problem. I find it usually ends with pain when you try to fight a platform to keep it from doing what it wants to do, and URLs structures are really baked into WordPress' architecture.
I wrote another answer which is very similar to your needs and that example can show you how to use the 'template_redirect'
hook to set up a redirect for those URLs here you have this problem:
- Creating 301 Redirects for Post, Page, Category and Image URLs?
If you'd like more clarification, please ask.
As far as I figure, search engines are not case specific, although URL's are case sensitive. I would recommend getting rid of the capitalized file format, as it is hard for users to remember.
If you really want to stick to the previous structure, you will need to work with regexp (regular expressions) in .htaccess file.
FEV 2020
Since Jan Fabry anwser, the Wordpress function changed a little bit, so, the correct snippet to version 5.6 is:
add_filter( 'sanitize_title', 'wpse5029_sanitize_title_with_dashes', 10, 3 );
function wpse5029_sanitize_title_with_dashes($title, $raw_title, $context = 'display') {
$title = strip_tags( $raw_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 ) ) {
$title = utf8_uri_encode( utf8_encode($title), 200 );
}
if ( 'save' === $context ) {
// Convert  , &ndash, and &mdash to hyphens.
$title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );
// Convert  , &ndash, and &mdash HTML entities to hyphens.
$title = str_replace( array( ' ', ' ', '–', '–', '—', '—' ), '-', $title );
// Convert forward slash to hyphen.
$title = str_replace( '/', '-', $title );
// Strip these characters entirely.
$title = str_replace(
array(
// Soft hyphens.
'%c2%ad',
// ¡ and ¿.
'%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',
// Bullet.
'%e2%80%a2',
// ©, ®, °, &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 × to 'x'.
$title = str_replace( '%c3%97', 'x', $title );
}
// Kill entities.
$title = preg_replace( '/&.+?;/', '', $title );
$title = str_replace( '.', '-', $title );
$title = preg_replace( '/[^%a-zA-Z0-9 _-]/', '', $title );
$title = preg_replace( '/\s+/', '-', $title );
$title = preg_replace( '|-+|', '-', $title );
$title = trim( $title, '-' );
return $title;
}
The editor will keep showing the lowercase URL, but it will have saved exactly as you sent, without changing the capitalization.
Obs: it might not be a good idea to use this type of function, since the lowercase pattern is more convenient.
I do this directly on mysql table and works fine:
You can try this. Paste this below code in your function.php theme file. This is working for me.
// Remove existing filter
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );
// Function to maintain capitalization in slugs
function maintain_capitalization_slug($title, $raw_title, $context) {
// Apply only when saving slugs
if ($context === 'save') {
// Preserve capitalization and replace special characters with hyphens
$title = preg_replace('/[^a-zA-Z0-9]+/', '-', $raw_title); // Replace non-alphanumeric characters with hyphens
$title = trim($title, '-'); // Trim leading/trailing hyphens
}
return $title;
}
// Apply the custom function to 'sanitize_title'
add_filter('sanitize_title', 'maintain_capitalization_slug', 10, 3);
本文标签: How can I make Capital letter ( uppercase ) permalinks
版权声明:本文标题:How can I make Capital letter ( upper-case ) permalinks? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736308778a1933784.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论