I recently converted a site from Moveable Type to WordPress and noticed that the permalinks for each post are short, cut off and have underscores in them.

What I am looking to do is if there is a script or SQL command I can run to mass change each posts permalink to the default permalink it would have normally generated based on the post title.

Thanks in advance!

  • What are the desired before and after states? I just recently had to go through an update of urls because I messed up in the migration process by creating duplicate URLS for posts with the same titles. I had to create a PHP script that first read the entry from the database, then modified the string in question, then updated the database entry where it was pulled from. My script wouldn't necessary work in this scenario, but that's why I asked what your before and after states are.
    – Brent
    Commented Aug 16, 2012 at 5:08

2 Answers 2


Maybe this doesn't answer your question... but maybe you can adapt it to suit by changing what you put into $slug.

Try this, which should loop over posts and reset the slug to match the post name. For pages, add 'post_type' => 'page' to the array passed to get_posts().

$posts = get_posts(array('posts_per_page' => -1));

foreach ($posts as $post) {
    $slug = sanitize_title(strtolower($post->post_title));
    $slug = wp_unique_post_slug($slug, $post->ID, $post->post_status, $post->post_type, $post->post_parent);

    wp_update_post(array('ID' => $post->ID, 'post_name' => $slug));

It would seem the importer did not fully import slug names, or had a slug limit, which caused this effect.

You can run a query to update all the slugs based on article names, which is the default approach by WordPress as well when generating the initial slug (referenced as *post_name* in the DB table *wp_posts*).

It is recommended to first sanitize your post names of course (using sanitize_title_with_dashes() for this purpose seems apropriate.

A short snippet that performs an update to the slug of all posts was created for the purpose of this question and can be seen at https://github.com/Clorith/wp-slug-update if you don't wish to start touching upon the code aspect your self.

  • Welcome to WordPress Answers! An answer should be more than just a link to an external site. Please add a solution.
    – fuxia
    Commented Aug 16, 2012 at 19:28
  • Hey! This is almost exactly what I've been looking for. With one tiny addition — is there a way to append the slug to the post name? Tumblr's urls look like example.com/593839548/post-name. Your snippet chops off the number and adds the post-name, but is there a way to append the post name after the number? Huge thanks!
    – saltcod
    Commented May 22, 2014 at 19:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.