public static function update_course_from_product($product_id, $post, $before_update)
 {
     $x = '';
     // If its not a product, exit
     if (self::$product_ctp !== $post->post_type || !self::is_active()) {
         return;
     }
     // If update is caused by this class already, then bail
     if (self::$updated) {
         self::$updated = false;
         return;
     }
     $base = self::get_base();
     $course_id = false;
     switch ($base) {
         case '3.0':
             $course_id = (int) get_post_meta($product_id, 'course_id', true);
             break;
         case '2.0':
             $course_id = (int) get_post_meta($product_id, 'mp_course_id', true);
             break;
     }
     // No point proceeding if there is no associated course
     if (empty($course_id)) {
         return;
     }
     $sku = $price = $sale_price = '';
     $is_sale = $is_paid = false;
     switch ($base) {
         case '3.0':
             $sku = isset($_POST['sku']) ? sanitize_text_field($_POST['sku']) : get_post_meta($product_id, 'sku', true);
             $sku = is_array($sku) ? array_shift($sku) : $sku;
             $price = isset($_POST['regular_price']) ? sanitize_text_field($_POST['regular_price']) : get_post_meta($product_id, 'regular_price', true);
             $price = is_array($price) ? array_shift($price) : $price;
             $sale_price = isset($_POST['sale_price']['amount']) ? sanitize_text_field($_POST['sale_price']['amount']) : get_post_meta($product_id, 'sale_price_amount', true);
             $sale_price = is_array($sale_price) ? array_shift($sale_price) : $sale_price;
             $is_sale = isset($_POST['has_sale']) ? sanitize_text_field($_POST['has_sale']) : get_post_meta($product_id, 'has_sale', true);
             $is_paid = 'publish' === $post->post_status;
             break;
         case '2.0':
             $sku = get_post_meta($product_id, 'mp_sku', true);
             $sku = is_array($sku) ? array_shift($sku) : $sku;
             $price = get_post_meta($product_id, 'mp_price', true);
             $price = is_array($price) ? array_shift($price) : $price;
             $sale_price = get_post_meta($product_id, 'mp_sale_price', true);
             $sale_price = is_array($sale_price) ? array_shift($sale_price) : $sale_price;
             $is_sale = get_post_meta($product_id, 'mp_is_sale', true);
             $is_paid = 'publish' === $post->post_status;
             break;
     }
     $meta = array('mp_sku' => $sku, 'mp_price' => $price, 'mp_is_sale' => $is_sale, 'mp_sale_price' => $sale_price, 'paid_course' => $is_paid ? 'on' : 'off');
     foreach ($meta as $key => $value) {
         update_post_meta($course_id, $key, $value);
     }
     self::$updated = true;
 }