Sei que isso é antigo, mas também tenho esse problema e achei uma maneira bastante clara de lidar com isso: usar um walker de menu personalizado
class KB_Custom_Menu_Walker extends Walker_Nav_Menu {
protected static $custom_post_types = array();
public function start_el(&$output, $item, $depth=0, $args=array(), $id=0) {
if (isset( self::$custom_post_types[ $item->url ] )) {
$item->url = get_post_type_archive_link( self::$custom_post_types[$item->url] );
}
parent::start_el($output, $item, $depth, $args, $id);
}
public static function custom_post_types($type=null) {
if ($type) {
self::$custom_post_types[ '#post_type_'.$type ] = $type;
}
return self::$custom_post_types;
}
}
Tendo um item de menu de link personalizado com URL de #post_type_album
, você pode usá-lo assim:
# Where you defined your custom post type (could be anywhere anyway)
KB_Custom_Menu_Walker::custom_post_types('album');
# And display the menu
wp_nav_menu(array(
'theme_location' => 'primary-nav',
'walker' => new KB_Custom_Menu_Walker(),
));
Nota: Isso pressupõe que a lesma e o nome do seu tipo de postagem sejam os mesmos.