如何加点(“.”)在后置弹丸中

时间:2016-07-05 作者:bhv

如何添加点(.) 在post slugs中?

在我们的博客中,我们正在写有关网站的文章,并希望使用其确切地址作为slug,如下所示:

ourdomain.com/example1.com

但点要么在保存帖子时被删除,要么在我们成功添加帖子时WordPress找不到该帖子。

有什么选择吗?

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

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() 低于该值的函数。

请注意,我没有用分页或类似的方法对此进行测试,它只是阻止了点从前端/后端的段塞中剥离,因此可能产生的任何问题都需要相应地处理。

SO网友:suresh

PLUGIN: 我们可以使用以下插件https://wordpress.org/plugins/permalink-manager/ 如果你想编辑一些帖子,这个插件可以帮助我。

相关推荐

为什么我的可过滤公文包页面在Slug按钮和Slug输出WORDRPESS之间不能完美地工作?

我目前在Wordpress中有一个公文包自定义页面,可以根据需要工作,但我有一个问题。问题是,当我单击其中一个slug按钮时,主体/输出不是我想要的那样工作,例如在slug IOS中有3个项目,当我单击IOS slug中的“显示3个项目”时,应该是这样,但在这只显示1个项目。我读过很多类似于这个问题的教程,但都没有解决,请有人帮帮我,我一直在尝试解决这个问题,但仍然没有成功。以下是我读过的一篇文章:https://danny.care/a-responsive-filterable-portfolio-t