Your account expired support, please renew to get your support.

Home Forums Themes Support Claue Change WooCommerce product title based on variation selected

Viewing 5 reply threads
  • Author
    Posts
    • #32934
      DanielJohnston
      Support Expired

      Hi

      I would like to be able to show the product variation on the product title.

      Variation is colour

      Product is shoes

      So when someone views the product and clicks the red swatch the product title (product_title entry-title) would read shoes : red

       

    • #32938
      Harry
      Support Expired

      Hi,

      Please add below code to claue-child > functions.php

      add_filter( 'wp_footer','custom_product_title_script' );
      function custom_product_title_script(){
          global $post;
      
          // Only single product pages
          if( ! is_product() ) return;
      
          // get an instance of the WC_Product Object
          $product = wc_get_product($post->ID);
      
          // Only for variable products
          if( ! $product->is_type( 'variable' ) ) return;
      
          // Here set your specific product attributes in this array (coma separated):
          $attributes = array('pa_color');
      
          // The 1st loop for variations IDs
          foreach($product->get_visible_children( ) as $variation_id ) {
      
              // The 2nd loop for attribute(s)/value
              foreach($product->get_available_variation( $variation_id )['attributes'] as $key => $value_id ){
                  $taxonomy = str_replace( 'attribute_', '', $key ); // Get the taxonomy of the product attribute
      
                  // Just for defined attributes
                  if( in_array( $taxonomy, $attributes) ){
                      // Set and structure data in an array( variation ID => product attribute => term name )
                      $data[ $variation_id ][$taxonomy] = get_term_by( 'slug', $value_id, $taxonomy )->name;
                  }
              }
          }
      
          ?>
              <script type="text/javascript">
                  (function($){
                      // variables initialization
                      var variationsData = <?php echo json_encode($data); ?>,
                          productTitle = $('.product_title').text(),
                          color = 'pa_color';
                      console.log(variationsData);
      
                      // function that get the selected variation and change title
                      function update_the_title( productTitle, variationsData, color ){
                          $.each( variationsData, function( index, value ){
                              if( index == $('input.variation_id').val() ){
                                  $('.product_title').text(productTitle+' - '+value);
                                  console.log('TITLE UPDATED');
                                  return false;
                              } else {
                                  $('.product_title').text(productTitle);
                              }
                          });
                      }
      
                      // Once all loaded
                      setTimeout(function(){
                          update_the_title( productTitle, variationsData, color );
                      }, 300);
      
                      // On live event: select fields
                      $('select').blur( function(){
                          update_the_title( productTitle, variationsData, color );
                      });
                  })(jQuery);
              </script>
          <?php
      }

      Kind regards

      Harry
      Premium Wordpress themes and plugins, Best WooCommerce theme https://themeforest.net/user/janstudio/portfolio?ref=janstudio

    • #32940
      DanielJohnston
      Support Expired

      Thank you, I found the same code.

      How do I find the // Here set your specific product attributes in this array (coma separated):
      ?

      Did this code work for you?

       

    • #32981
      Harry
      Support Expired

      Hi,

      Sorry for late reply. Because your variation are colour so please change code to

      add_filter( 'wp_footer','custom_product_title_script' );
      function custom_product_title_script(){
          global $post;
      
          // Only single product pages
          if( ! is_product() ) return;
      
          // get an instance of the WC_Product Object
          $product = wc_get_product($post->ID);
      
          // Only for variable products
          if( ! $product->is_type( 'variable' ) ) return;
      
          // Here set your specific product attributes in this array (coma separated):
          $attributes = array('pa_colour');
      
          // The 1st loop for variations IDs
          foreach($product->get_visible_children( ) as $variation_id ) {
      
              // The 2nd loop for attribute(s)/value
              foreach($product->get_available_variation( $variation_id )['attributes'] as $key => $value_id ){
                  $taxonomy = str_replace( 'attribute_', '', $key ); // Get the taxonomy of the product attribute
      
                  // Just for defined attributes
                  if( in_array( $taxonomy, $attributes) ){
                      // Set and structure data in an array( variation ID => product attribute => term name )
                      $data[ $variation_id ][$taxonomy] = get_term_by( 'slug', $value_id, $taxonomy )->name;
                  }
              }
          }
      
          ?>
              <script type="text/javascript">
                  (function($){
                      // variables initialization
                      var variationsData = <?php echo json_encode($data); ?>,
                          productTitle = $('.product_title').text(),
                          color = 'pa_colour';
                      console.log(variationsData);
      
                      // function that get the selected variation and change title
                      function update_the_title( productTitle, variationsData, color ){
                          $.each( variationsData, function( index, value ){
                              if( index == $('input.variation_id').val() ){
                                  $('.product_title').text(productTitle+' - '+value);
                                  console.log('TITLE UPDATED');
                                  return false;
                              } else {
                                  $('.product_title').text(productTitle);
                              }
                          });
                      }
      
                      // Once all loaded
                      setTimeout(function(){
                          update_the_title( productTitle, variationsData, color );
                      }, 300);
      
                      // On live event: select fields
                      $('select').blur( function(){
                          update_the_title( productTitle, variationsData, color );
                      });
                  })(jQuery);
              </script>
          <?php
      }

      Kind regards

      Harry
      Premium Wordpress themes and plugins, Best WooCommerce theme https://themeforest.net/user/janstudio/portfolio?ref=janstudio

    • #32991
      DanielJohnston
      Support Expired

      Thank you for your help so far

       

      The title now changes to  – [object Object]

    • #32994
      Harry
      Support Expired

      Can you send me login credentials and check in “Set as private reply” We need to check more before give you solution.

      Kind regards

      Harry
      Premium Wordpress themes and plugins, Best WooCommerce theme https://themeforest.net/user/janstudio/portfolio?ref=janstudio

Viewing 5 reply threads

You must be logged in to reply to this topic.