Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save AnatoliyAkhmatov/8aa7b84fd795235b4f21ccc0d7933800 to your computer and use it in GitHub Desktop.
Save AnatoliyAkhmatov/8aa7b84fd795235b4f21ccc0d7933800 to your computer and use it in GitHub Desktop.
/**
* 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(
'projects',
'catalog',
'feedbacks',
'actions'
);
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
'projects',
'catalog',
'feedbacks',
'actions',
);
$query->set( 'post_type', $post_types );
}
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment