Is the normal behavior of wp_tag_cloud
: it show all tags, not only the tags for a specific post, even if inserted in a singular page. However, that function has an option include that let you define the tags to include (must be comma separed list of tag ids).
So, in your template file, pass that param to wp_tag_cloud
using as value the list of tag ids of current post, that you can retrieve using get_the_terms
and wp_list_pluck
global $post;
$terms = get_the_terms( $post->ID, 'project_services' );
$tag_list = implode(',', wp_list_pluck($terms, 'term_id') );
$args = array(
'taxonomy' => 'project_services',
'separator' => ', ',
'include' => $tag_list
);
wp_tag_cloud( $args );
In this way only page related tags will be shown in tag cloud.