admin管理员组

文章数量:1391991

How to add dot(.) in post slugs?

In our blog, we are writing about websites and would like to use their exact address as slug like this:

ourdomain/example1

But dots are either removed when a post is saved, or WordPress doesn't find the post when we successfully add one.

Is there any option available?

How to add dot(.) in post slugs?

In our blog, we are writing about websites and would like to use their exact address as slug like this:

ourdomain/example1

But dots are either removed when a post is saved, or WordPress doesn't find the post when we successfully add one.

Is there any option available?

Share Improve this question edited Jul 5, 2016 at 5:59 fuxia 107k39 gold badges255 silver badges459 bronze badges asked Jul 5, 2016 at 4:56 bhvbhv 1631 silver badge10 bronze badges 2
  • Can you share more specific url – Suyash Jain Commented Jul 5, 2016 at 5:03
  • It would be better if u don't change in permalinks structure for that! Individualy changnging on certain pages would be better. And that can be done with this plugin wordpress/plugins/custom-permalinks This plugin will do the trick for you... You can change the url individually on pages/posts via this plugin. But keep checking for non plugin solution :) – Rishabh Commented Jul 5, 2016 at 7:28
Add a comment  | 

2 Answers 2

Reset to default 3

WordPress runs slugs through its sanitize_title_with_dashes() filter function which replaces dots with dashes. Unfortunately the function doesn't give you any control over that or any ability to change what characters are stripped or replaced.

What we can do however is remove that filter and add our own version of it with a couple of modifications:

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

The lines I edited are commented with a "WPSE-231448" - First I commented out the line which does a str_replace() and replaces dots with dashes, then I added the dot to the list of characters to NOT be replaced in the preg_replace() function below that.

Please note that I have not tested this with pagination or anything like that, it simply stops dots being stripped from slugs on the front/backend and any issues that may arise from that will need to be handled accordingly.

PLUGIN: we can use the following plugin https://wordpress/plugins/permalink-manager/ this plugins helped me if you want to edit some of the posts.

本文标签: url rewritingHow to add dot(quotquot) in post slug