Figured out the answer myself. Luckily, I had a lot of the requirements already set up and it was just a matter of piecing them together. I am using a custom nav walker, and the start_el
function passes in an $item
parameter that contains an object
property, telling you what that nav item is (ie. a page, a custom link, or in our case, a category). I was able to use this information, along with a custom function I created for generating the category URL, to get the result I was looking for:
My_Nav_Walker.php
class My_Nav_Walker extends Walker_Nav_Menu {
/* ... */
function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
/* ... */
$attributes = !empty($item->attr_title) ? ' title="' . esc_attr($item->attr_title) . '"' : '';
$url = $item->url;
if($item->object == "category") {
$category = get_category($item->object_id);
$url = get_category_url($category->slug);
}
$attributes .= !empty($url) ? ' href="' . esc_attr($url) . '"' : '';
/* ... */
}
/* ... */
}
Custom Category URL Function
function get_category_url($category_slug) {
return get_post_type_archive_link( 'post' ) . '?category=' . $category;
}