Last active
April 12, 2023 09:37
-
-
Save Bobz-zg/858c008f1d6109132c9b to your computer and use it in GitHub Desktop.
Redirects wordpress posts to new url: site.com/blog/post-name
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Add new rewrite rule | |
*/ | |
function create_new_url_querystring() { | |
add_rewrite_rule( | |
'blog/([^/]*)$', | |
'index.php?name=$matches[1]', | |
'top' | |
); | |
add_rewrite_tag('%blog%','([^/]*)'); | |
} | |
add_action('init', 'create_new_url_querystring', 999 ); | |
/** | |
* Modify post link | |
* This will print /blog/post-name instead of /post-name | |
*/ | |
function append_query_string( $url, $post, $leavename ) { | |
if ( $post->post_type != 'post' ) | |
return $url; | |
if ( false !== strpos( $url, '%postname%' ) ) { | |
$slug = '%postname%'; | |
} | |
elseif ( $post->post_name ) { | |
$slug = $post->post_name; | |
} | |
else { | |
$slug = sanitize_title( $post->post_title ); | |
} | |
$url = home_url( user_trailingslashit( 'blog/'. $slug ) ); | |
return $url; | |
} | |
add_filter( 'post_link', 'append_query_string', 10, 3 ); | |
/** | |
* Redirect all posts to new url | |
* If you get error 'Too many redirects' or 'Redirect loop', then delete everything below | |
*/ | |
function redirect_old_urls() { | |
if ( is_singular('post') ) { | |
global $post; | |
if ( strpos( $_SERVER['REQUEST_URI'], '/blog/') === false) { | |
wp_redirect( home_url( user_trailingslashit( "blog/$post->post_name" ) ), 301 ); | |
exit(); | |
} | |
} | |
} | |
add_filter( 'template_redirect', 'redirect_old_urls' ); | |
This breaks with paginated single posts (<!--nextpage-->), adding this to the rewrite function fixes it.
//corrects inpost navigation without breaking archive pagination `bottom`
add_rewrite_rule(
'blog/([^/]*)(/[0-9]+)?/?$',
'index.php?name=$matches[1]&page=$matches[2]',
'bottom'
);
Here is what I use:
https://gist.github.com/carasmo/d987754910efe2d7303e0be6e8068ea9
- Adds the blog/ path without affecting all other CPTS now and in the future.
- Changes all labels to Blog
- Converts post_tag to hierarchical because flat is annoying to deal with
Nice work! I read some people had trouble with post previews when adding this.
I got it working by changing two lines.
on L23 change if ( $post->post_type != 'post' )
to if ( $post->post_type != 'post' && $post->post_status != 'publish')
and L50 should change from if ( is_singular('post') )
to if ( is_singular('post') && !is_preview() )
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
HI,
Thanks for code.
I was Modify post link /blog/post-name instead of /post-name with custom code.
Page working fine. But AMP pages not working. Getting 404 error
PLease check this links
https://www.whichbroker.com/en/news/city-index-brand-to-be-shelved/
https://www.whichbroker.com/en/news/city-index-brand-to-be-shelved/amp/
Can you please help me on this issue?