Skip to content

Instantly share code, notes, and snippets.

@wpexplorer
Last active October 7, 2022 01:27
Show Gist options
  • Select an option

  • Save wpexplorer/9745717 to your computer and use it in GitHub Desktop.

Select an option

Save wpexplorer/9745717 to your computer and use it in GitHub Desktop.
Remove Custom Post Type Slug
<?php
/**
* Remove the slug from published post permalinks for our custom post types.
*/
add_filter( 'post_type_link', function( $post_link, $post, $leavename ) {
$post_types = array(
'post_type_1',
'post_type_2'
);
if ( in_array( $post->post_type, $post_types ) && 'publish' === $post->post_status ) {
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
}
return $post_link;
}, 10, 3 );
/**
* Some hackery to have WordPress match postname to any of our public post types.
*
* All of our public post types can have /post-name/ as the slug, so they better be unique across all posts
* Typically core only accounts for posts and pages where the slug is /post-name/
*/
add_action( 'pre_get_posts', function( $query ) {
// Only noop the main query.
if ( ! $query->is_main_query() )
return;
}
// Only noop our very specific rewrite rule match.
if ( 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
return;
}
// 'name' will be set if post permalinks are just post_name, otherwise the page rule will match.
if ( ! empty( $query->query['name'] ) ) {
$post_types = array(
'post', // important to not break your standard posts
'page', // important to not break your standard pages
'post_type_1',
'post_type_2'
);
$query->set( 'post_type', $post_types );
}
} );
@stefanRepac

Copy link
Copy Markdown

Thank you!

@hvstdev

hvstdev commented Aug 29, 2019

Copy link
Copy Markdown

Thank you for this, do you have any idea how to 404 the old URLs with slugs? Because this creates duplicate content issues.

@stefanRepac

Copy link
Copy Markdown

@timwd01 did you go to permalinks in admin and resave them?

@hvstdev

hvstdev commented Aug 30, 2019

Copy link
Copy Markdown

@Soullighter I did, it still seems to be accessible on the old slugs, as well as without a slug.

@yfchild

yfchild commented Dec 2, 2019

Copy link
Copy Markdown

Hi. It´s perfect but doesn' t parse with languages.

example: www.domain.com/slugremove/urlxxxx with main language (in my case FR) www.domain.com/urlxxxx = perfect
example: www.domain.com/es/slugremove/urlxxxx with main language (spanish) www.domain.com/es/urlxxxx = redirect to home
example: www.domain.com/en/slugremove/urlxxxx with main language (english) www.domain.com/en/urlxxxx = redirect to home also

i try since several days, but not success, i try rewrite also with rank math seo= nothing.

I think, it´s because 'slugremove' it´s the same word in 3 language. Can you suggest me something or idea update code to rewrite.

Can you help me?

@wpexplorer

Copy link
Copy Markdown
Author

@yfchild - This would be an issue with the way in which the language plugin is doing redirects and not the code itself. So it will likely depend on the translation plugin you are using, you should ask the translation plugin developer.

@vijaysmith

Copy link
Copy Markdown

This doesn't work for Child posts, its resulting into 404!

@wpexplorer

Copy link
Copy Markdown
Author

@vijaysmith - This could be an issue perhaps with the "with_front" parameter. By default "child posts" are for standard pages not custom post types so it could just be an issue with WordPress. What's the purpose of Child Posts? why not just create a taxonomy for your post type?

@TopDMA

TopDMA commented Jan 19, 2021

Copy link
Copy Markdown

Hi i have 3 custom post type, and this code work only for one from them. How i can do this for all? Thank you

@wpexplorer

wpexplorer commented Jan 19, 2021

Copy link
Copy Markdown
Author

@TopDMA - just add your types in an array and alter the code a bit. I updated the original gist since I'm sure most would like to affect multiple types.

@wpexplorer

Copy link
Copy Markdown
Author

If you need a plugin for adding post types to your site check out our Post Types Unlimited Plugin: https://wordpress.org/plugins/post-types-unlimited/

@TopDMA

TopDMA commented Jan 20, 2021

Copy link
Copy Markdown

Thank You!!

@vlashkevych

Copy link
Copy Markdown

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment