You should no longer use the legacy function parameter format. Instead, as the documentation says, use the get_terms( $args ) format:
Since 4.5.0, taxonomies should be passed via the ‘taxonomy’ argument
in the $args array:
$terms = get_terms( array(
'taxonomy' => 'post_tag',
'hide_empty' => false,
And as for getting only the terms assigned ...
Instead of showing custom field with text, create a custom field with select dropdown.
Populate that dropdown options with get_terms function (term_id as value)
Add multiple attribute to select if you need to store more than one term relation.
Store values as array of term ids
On frontend loop trough saved array and use get_term function to get term ...
You actually correctly assigned the tag to the post, but the taxonomy is pets_tag, so you shouldn't use get_the_tags() which is for the default post_tag taxonomy.
Instead, you should use get_the_terms() to get the pets_tag terms assigned to the post:
$terms = get_the_terms( 3356, 'pets_tag' );
I've found the problem, and now I realise I had this exact same problem years ago on a different project:
'exclude_from_search' => true
Needed changing to:
'exclude_from_search' => false
'has_archive' => true,
I don't get why excluding a post type from search should affect archive templates, but at least it's fixed now.
I wanted to display the terms with the get_the_term_list function so, since categories & taxonomy have a "similar logic", I replaced the "the_category_list"
add_filter( 'the_category_list', 'ci_theme_the_category_list_remove_parent_categories', 10 );
add_filter( 'get_the_terms', '...