Wow @rickymccallum87, that’s it ??
Tested and working.
Afaik, these are all possible scenarios.
https://localhost/?cat=cat1,cat2
https://localhost/category/cat1,cat2/
https://localhost/category/cat1/cat2/
So I refactored the code to cover all scenarios.
add_filter('get_the_archive_title', 'wpsf_multiple_categories_title', 10, 3);
function wpsf_multiple_categories_title($title, $original_title, $prefix)
{
$cats_query_data = get_categories_query_data();
if (!$cats_query_data['separator'])
return $original_title;
$category_slugs = explode($cats_query_data['separator'], $cats_query_data['args']);
// Convert category slugs to title case category names
$category_names = array_map(function ($slug) {
return get_term_by('slug', $slug, 'category')->name;
}, $category_slugs);
return implode(', ', $category_names);
}
function get_categories_query_data(): array
{
if (!is_category())
return ['separator' => 0];
if (strpos($_REQUEST['cat'], ','))
return ['separator' => ',', 'args' => $_REQUEST['cat']];
global $wp_query;
$category_name_args = $wp_query->query['category_name'];
if (strpos($category_name_args, ',')) {
return ['separator' => ',', 'args' => $category_name_args];
} elseif (strpos($category_name_args, '/')) {
return ['separator' => '/', 'args' => $category_name_args];
} else {
return ['separator' => 0];
}
}