I want to add a brand and a gtin to my product markup in WooCommerce. At the moment the Yoast SEO plugin already adds a lot of markup. But it only has the option to add the brand with a product attribute. In my case, the brand is based on a custom field. Also, the gtin is in a different field and couldn't be used with Yoast.
I found a code snippet in their docs which allows to add custom data to the markup:
add_filter( 'wpseo_schema_webpage', 'example_change_webpage' );
/**
 * Changes @type of Webpage Schema data.
 *
 * @param array $data Schema.org Webpage data array.
 *
 * @return array Schema.org Webpage data array.
 */
function example_change_webpage( $data ) {
    if ( ! is_page( 'about' ) ) {
        return $data;
    }
    $data['@type'] = 'AboutPage';
    return $data;
}
But that's not for products and I couldn't see how I can change that.
I also found an example for the schema piece product:
{
      "@context": "https://schema.org",
      "@graph": [
          {
              "@type": "Product",
              "@id": "https://www.example.com/#/schema/product/abc123",
              "name": "Example Product",
              "image": {
                  "@id": "https://www.example.com/#/schema/image/abc123"
              }
          }
      ]
  }
I could use that in a custom function and add it as javascript in the head. Like this:
add_action( 'wp_head', function() {
    if ( is_product() ): 
    
    ?>
    
    <script type="application/ld+json">{
          "@context": "https://schema.org",
          "@graph": [
              {
                  "@type": "Product",
                  "@id": "#product",
                  "brand": {
                      "@id": "https://www.example.com/#/schema/organization/abc123"
                  },
                  "sku": "abc123",
              }
          ]
      }</script>
    
<?php
endif;
 }, 99 );
But now I have two different schema markups for the product.
Isn't there a way to add content to the existing markup from Yoast?