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.

2 Answers
2

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

Leave a Reply

Your email address will not be published. Required fields are marked *