Admin Table Filtering not Working for Custom Post Type

Well, the short answer is that your taxonomies and custom post types share slugs, which is what is causing the list table to display nothing. If you were to change the taxonomy slugs from $newType to $newType . '_tax' it should work. I actually used that same slug formula in the rewrites example below.

If you’re really just trying to save time by using the same slugs, simply make the slugs unique for post_type vs taxonomy and ignore the rest of this answer.

However, if you’re using the same slugs in an attempt to share the front-end rewrite slugs, e.g. example.com/dog/labrador (term) vs example.com/dog/this-is-a-dog-item (post), the following should work for that in some measure:

/**
 * Match taxonomy term rewrite slugs with custom post type slugs.
 *
 * @param WP_Rewrite $wp_rewrite WP_Rewrite global.
 */
function match_tax_rewrites_to_cpt( $wp_rewrite ) {
    $pairs = array();

    // Set up post type and taxonomy pairs.
    foreach ( array( 'dog', 'cat', 'fish', 'bird' ) as $slug ) {
        $post_type = get_post_type_object( $slug );
        $taxonomy  = get_taxonomy( $slug . '_tax' );
        if ( is_object( $post_type ) && is_object( $taxonomy ) ) {
            $pairs[ $slug ] = array(
                'post_type' => $post_type,
                'taxonomy'  => $taxonomy
            );
        }
    }

    if ( ! empty( $pairs ) ) {
        $rules = array();

        // Loop through the pairs.
        foreach ( $pairs as $slug => $objects ) {

            // Check if taxonomy is registered for this custom type.
            if ( ! empty( $tax_obj_type = $objects['taxonomy']->object_type[0] ) ) {
                if ( $tax_obj_type == $slug ) {

                    // Term objects.
                    $terms = get_categories( array(
                        'type'       => $tax_obj_type,
                        'taxonomy'   => $objects['taxonomy']->name,
                        'hide_empty' => false
                    ) );

                    // Build your rewrites.
                    foreach ( $terms as $term ) {
                        $rules[ "{$tax_obj_type}/{$term->slug}/?$" ] = add_query_arg( $term->taxonomy, $term->slug, 'index.php' );
                    }
                }
            }
        }
        // Merge the rewrites.
        $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    }
}
add_action( 'generate_rewrite_rules', 'match_tax_rewrites_to_cpt' );

It’s worth noting that if you use this function to generate rewrite rules, it’s actually important that you move the register_post_type() calls above the register_taxonomy() calls. This is to ensure that the base rewrite rules generated by WordPress end up in the right order.