The post_link WordPress PHP filter allows you to modify the permalink of a post.
Usage
add_filter('post_link', 'your_function_name', 10, 3);
function your_function_name($permalink, $post, $leavename) {
// your custom code here
return $permalink;
}
Parameters
- $permalink (string) – The post’s permalink.
- $post (WP_Post) – The post in question.
- $leavename (bool) – Whether to keep the post name.
More information
See WordPress Developer Resources: post_link
Examples
Add a prefix to post permalinks
This example adds a custom prefix to the post permalinks.
add_filter('post_link', 'add_prefix_to_permalink', 10, 3);
function add_prefix_to_permalink($permalink, $post, $leavename) {
$prefix = 'my-prefix';
$permalink = str_replace(home_url('/'), home_url('/') . $prefix . '/', $permalink);
return $permalink;
}
Append the post ID to the permalink
This example appends the post ID to the post’s permalink.
add_filter('post_link', 'append_post_id_to_permalink', 10, 3);
function append_post_id_to_permalink($permalink, $post, $leavename) {
$permalink .= '-' . $post->ID;
return $permalink;
}
Change the permalink structure for a specific category
This example changes the permalink structure for posts in the ‘news’ category.
add_filter('post_link', 'change_permalink_for_news_category', 10, 3);
function change_permalink_for_news_category($permalink, $post, $leavename) {
if (in_category('news', $post)) {
$permalink = home_url('/') . 'news/' . $post->post_name;
}
return $permalink;
}
Make permalinks UPPERCASE
This example makes all post permalinks uppercase.
add_filter('post_link', 'uppercase_permalink', 10, 3);
function uppercase_permalink($permalink, $post, $leavename) {
$permalink = strtoupper($permalink);
return $permalink;
}
Remove the date from the permalink
This example removes the date from the post permalink.
add_filter('post_link', 'remove_date_from_permalink', 10, 3);
function remove_date_from_permalink($permalink, $post, $leavename) {
$permalink = preg_replace('/\d{4}\/\d{2}\//', '', $permalink);
return $permalink;
}