DEV Community

endan
endan

Posted on • Originally published at wordpress.stackexchange.com

Programmatically rewriting slug through functions.php but returns 404 [Wordpress]

I wanted to change the slug of a certain post type (in this case, article) into whatever a certain value in its custom field.

I went to functions.php and put this code.

function na_remove_slug( $post_link, $post, $leavename ) { if ( 'article' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } # get the custom field value here to be the slug $post_name = get_field('filter_category', $post->ID)->post_name; # replace the "article" by the value of the custom field $post_link = str_replace( '/' . $post->post_type . '/', "/$post_name/", $post_link ); return $post_link; } add_filter( 'post_type_link', 'na_remove_slug', 10, 3 ); 
Enter fullscreen mode Exit fullscreen mode

When I query the custom post types, it appears as if its slug was altered, for example:
www.example.com/article/some-title into www.example.com/design/some-title

Where design is my custom field value.

But when I finally visit www.example.com/design/some-title, I get a 404. But if I visit www.example.com/article/some-title, it returns the correct web page.

I understand that my code only changes how the link appears when it is displayed, but how can I show my single post correctly using the slug that I have altered?

If you need more clarification, please don't hesitate to comment.

Top comments (3)

Collapse
 
kip13 profile image
kip • Edited
Collapse
 
jjjjcccjjf profile image
endan

Will do, I'm going to get back on you on this. Thanks!

Collapse
 
kip13 profile image
kip

Hey, how was it ?