TransWikia.com

How can I make Capital letter ( upper-case ) permalinks?

WordPress Development Asked on December 1, 2021

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…

5 Answers

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 &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 );
        // Convert forward slash to hyphen.
        $title = str_replace( '/', '-', $title );

        // Strip these characters entirely.
        $title = str_replace(
            array(
                // Soft hyphens.
                '%c2%ad',
                // &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',
                // Bullet.
                '%e2%80%a2',
                // &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 );
    }
    // 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.

Answered by Lucius on December 1, 2021

I do this directly on mysql table and works fine: enter image description here

Answered by Roberto on December 1, 2021

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:

If you'd like more clarification, please ask.

Answered by MikeSchinkel on December 1, 2021

The 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;
}

Answered by Jan Fabry on December 1, 2021

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.

Answered by superUntitled on December 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP