is it possible to regenerate the slugs programmatically after changing the titles of the post? Numerous post titles were updated and the slug was not updated with the title so I need to regenerate all these slugs.
Leave a Reply
You must be logged in to post a comment.
Yes, it is possible.
Sample code, has to be tested and refined:
I just made this up, there are probably some errors and egde cases, but it should give you an idea. Also, this may take a while, so it could be useful to split the update into smaller chunks.
This plugin also does the job: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
However, as it only does it for posts which don’t have a slug yet, if you need to regenerate slugs edit the following line in the plugin:
if ($post->post_name == "") {
for example, you could change it to:
if (true) {
I was trying the method suggested by Toscho, which is the “instinctive one”, but in many cases it doesn’t work (cf the core code to get what I mean by “many cases”).
Looking in the code, I found the
wp_insert_post_data
filter hook, called by thewp_update_post
function right before inserting the post iunto the database.By calling this filter, and changing the value of
$data['post_name']
, I was able to get this to work properly. WordPress is cool but so badly documented…I edited the documentation, so that more people can find this workaround if needed.
you can do this directly in mysql if you need. (our woocommerce site has 100’s of thousands of products):
where post_type = ‘product’ – that will keep your update to just woocommerce products; you should figure out what limits you want to keep on this query.
We had an issue where we migrating and combined a bunch of post types. We had a bunch of blank titles as well. I wrote a WP CLI command to fix them all, but here is the gist of what I did:
Needed to do a direct MySQL update since wp_update_post doesn’t update the post_name.