filters - Don't replace "|" with Empty String ("") when generating slugs from title

I work for an architecture company and our project names mostly go like this: house|something, bridge|somewhere, buildin

I work for an architecture company and our project names mostly go like this: house|something, bridge|somewhere, building|whatever.

Now, when I want to add a new project named like that, WordPress automatically converts it to housesomething, bridgesomewhere and puts that as the slug. I'd much prefer to keep some kind of separator, e.g. house-something, bridge-somewhere instead.

So, how to make WordPress convert | to - and not Empty String ("")? I'm obviously tired of doing that manually all the time.

It seems to me that it's very simple to do. It takes just a simple search and replace kind of thing if one knows where to look (in the WP core or wherever), but I haven't the slightest idea where to look, or what code to execute.

I work for an architecture company and our project names mostly go like this: house|something, bridge|somewhere, building|whatever.

Now, when I want to add a new project named like that, WordPress automatically converts it to housesomething, bridgesomewhere and puts that as the slug. I'd much prefer to keep some kind of separator, e.g. house-something, bridge-somewhere instead.

So, how to make WordPress convert | to - and not Empty String ("")? I'm obviously tired of doing that manually all the time.

It seems to me that it's very simple to do. It takes just a simple search and replace kind of thing if one knows where to look (in the WP core or wherever), but I haven't the slightest idea where to look, or what code to execute.

Share Improve this question edited May 17, 2019 at 12:38 cjbj 15k16 gold badges42 silver badges89 bronze badges asked May 16, 2019 at 16:38 Marg9Marg9 354 bronze badges 0
Add a comment  | 

2 Answers 2

Reset to default 7

When WordPress inserts a post, it runs the title through a filter called sanitize_title to get the slug. By default there is a function called santize_title_with_dashes attached to this filter with priority 10. This function simply strips out the |. If it is surrounded by spaces those spaces will be converted to hyphens.

So your task is to run a filter on the same hook before (say, priority 9) the default one and replace the | with - before it gets stripped away. Like this:

add_filter( 'sanitize_title', function ( $title ) {
    return str_replace( '|', '-', $title );
}, 9 );

If you put spaces in between the words and the separator | the permalink will automatically include dashes between the words. For instance try this as your post title:

house | something, bridge | somewhere

That results in the slug:

house-something-bridge-somewhere

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745465991a4628921.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信