The post_type_archive_link WordPress PHP filter allows you to modify the permalink of a post type archive.
Usage
add_filter('post_type_archive_link', 'my_custom_function', 10, 2);
function my_custom_function($link, $post_type) {
// your custom code here
return $link;
}
Parameters
$link(string) – The post type archive permalink.$post_type(string) – Post type name.
More information
See WordPress Developer Resources: post_type_archive_link
Examples
Change archive link for a custom post type
Modify the archive link for a custom post type named ‘events’.
add_filter('post_type_archive_link', 'change_events_archive_link', 10, 2);
function change_events_archive_link($link, $post_type) {
if ('events' == $post_type) {
$link = home_url('/custom-events-archive/');
}
return $link;
}
Add query parameters to the archive link
Add the year and month query parameters to the archive link.
add_filter('post_type_archive_link', 'add_year_month_query_params', 10, 2);
function add_year_month_query_params($link, $post_type) {
$year = date('Y');
$month = date('m');
$link = add_query_arg(array('year' => $year, 'month' => $month), $link);
return $link;
}
Remove trailing slash from archive link
Remove the trailing slash from the post type archive link.
add_filter('post_type_archive_link', 'remove_trailing_slash', 10, 2);
function remove_trailing_slash($link, $post_type) {
return untrailingslashit($link);
}
Add language parameter to the archive link
Add a language parameter to the post type archive link for a multilingual site.
add_filter('post_type_archive_link', 'add_language_param', 10, 2);
function add_language_param($link, $post_type) {
$language = 'en';
$link = add_query_arg('lang', $language, $link);
return $link;
}
Change archive link based on user role
Change the post type archive link based on the current user’s role.
add_filter('post_type_archive_link', 'change_link_based_on_user_role', 10, 2);
function change_link_based_on_user_role($link, $post_type) {
if (current_user_can('administrator')) {
$link = home_url('/admin-archive/');
}
return $link;
}