public static function instance()
 {
     if (!isset(self::$instance) && !self::$instance instanceof CallsToAction) {
         self::$instance = new CallsToAction();
         /* Load CSS Template Parser */
         require_once WP_CTA_PATH . 'lib/Sabberworm/load-css-parse.php';
         /* load cta template data */
         $CTALoadExtensions = CTALoadExtensions();
         self::$instance->cta_templates = $CTALoadExtensions->template_definitions;
         /* load cta(s) */
         self::$instance->hooks();
     }
     return self::$instance;
 }
function wp_cta_save_meta($post_id)
{
    global $post;
    $CTAExtensions = CTALoadExtensions();
    $extension_data = $CTAExtensions->definitions;
    if (!isset($post)) {
        return;
    }
    if ($post->post_type == 'revision') {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE || isset($_POST['post_type']) && $_POST['post_type'] == 'revision') {
        return;
    }
    if ($post->post_type == 'wp-call-to-action') {
        unset($extension_data['wp-cta-controller']);
        foreach ($extension_data as $key => $data) {
            foreach ($extension_data[$key]['settings'] as $field) {
                isset($field['global']) && $field['global'] ? $field['id'] : ($field['id'] = $key . "-" . $field['id']);
                if ($field['type'] == 'tax_select') {
                    continue;
                }
                $field['id'] = apply_filters('wp_cta_ab_field_id', $field['id']);
                $old = get_post_meta($post_id, $field['id'], true);
                isset($_POST[$field['id']]) ? $new = $_POST[$field['id']] : ($new = null);
                /*
                echo $field['id'].' old:'.$old.'<br>';
                echo $field['id'].' new:'.$new.'<br>';
                */
                if (isset($new) && $new != $old) {
                    update_post_meta($post_id, $field['id'], $new);
                } elseif ('' == $new && $old) {
                    delete_post_meta($post_id, $field['id'], $old);
                }
            }
        }
        /* Save Live Variations into Meta Pair */
        $variations = get_post_meta($post_id, 'cta_ab_variations', true);
        $variations = explode(',', $variations);
        $live_variations = array();
        foreach ($variations as $key => $vid) {
            $status = wp_cta_ab_get_wp_cta_active_status($post, $vid);
            if ($status > 0 || !is_numeric($status)) {
                $live_variations[] = $vid;
            }
        }
        update_post_meta($post_id, 'wp_cta_live_variations', json_encode($live_variations));
    }
}