There are different ways to achieve this result, I used
pre_post_link
and post_rewrite_rules
filter hooks.
You can use eg. generate_rewrite_rules
hook, but with post_rewrite_rules
,
you can easily change permalinks not only to the post but also to its comments, attachments, etc.
Original permalinks you can keep or replace with new ones.
After adding the following code click Save in Dashboard -> Settings -> Permalinks
.
add_filter('pre_post_link', 'se332921_pre_post_link', 20, 3);
add_filter('post_rewrite_rules', 'se332921_post_rewrite_rules');
/**
* @param string $permalink The site's permalink structure.
* @param WP_Post $post The post in question.
* @param bool $leavename Whether to keep the post name.
*/
function se332921_pre_post_link($permalink, $post, $leavename)
{
if ( $post instanceof WP_Post && $post->post_type == 'post')
$permalink = '/post-prefix'.$permalink;
return $permalink;
}
/**
* @param array $post_rewrite The rewrite rules for posts.
*/
function se332921_post_rewrite_rules($post_rewrite)
{
if ( is_array($post_rewrite) )
{
$rw_prefix = [];
foreach( $post_rewrite as $k => $v) {
$rw_prefix[ 'post-prefix/'.$k] = $v;
}
//
// merge to keep original rules
$post_rewrite = array_merge($rw_prefix, $post_rewrite);
//
// or return only prefixed:
// $post_rewrite = $rw_prefix;
}
return $post_rewrite;
}