PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 1.4.1
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v1.4.1
3.4.2 3.4.1 3.4.0 3.3.9 3.3.8 3.3.7 3.3.6 3.3.5 3.3.4 3.3.3 3.3.2 3.3.1 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 2.3.0 2.3.1 2.3.2 All 195 releases
← All changes | wp-convertkit.php +404 -171 3.3.81.4.1 View file →
@@ -1,192 +1,425 @@
1 1 <?php
2 -/**
3 - * Kit (formerly ConvertKit) WordPress Plugin.
4 - *
5 - * @package ConvertKit
6 - * @author ConvertKit
7 - *
8 - * @wordpress-plugin
9 - * Plugin Name: Kit (formerly ConvertKit)
10 - * Plugin URI: https://kit.com/
11 - * Description: Display Kit (formerly ConvertKit) email subscription forms, landing pages, products, broadcasts and more.
12 - * Version: 3.3.8
13 - * Author: Kit
14 - * Author URI: https://kit.com/
15 - * Text Domain: convertkit
16 - * License: GPLv3 or later
17 - * License URI: https://www.gnu.org/licenses/gpl-3.0.html
2 +/*
3 + Plugin Name: WP ConvertKit
4 + Plugin URI: http://convertkit.com/
5 + Description: Quickly and easily integrate ConvertKit forms into your site.
6 + Version: 1.4.1
7 + Author: ConvertKit
8 + Author URI: http://convertkit.com/
18 9 */
19 10
20 -// Bail if Kit is already loaded.
21 -if ( class_exists( 'WP_ConvertKit' ) ) {
22 - return;
23 -}
11 +require_once plugin_dir_path( __FILE__ ) . "/lib/convertkit-api.php";
12 +require_once plugin_dir_path( __FILE__ ) . "/lib/integration/wishlist_member.php";
24 13
25 -// Define Kit Plugin paths and version number.
26 -define( 'CONVERTKIT_PLUGIN_NAME', 'ConvertKit' ); // Used for user-agent in API class.
27 -define( 'CONVERTKIT_PLUGIN_FILE', plugin_basename( __FILE__ ) );
28 -define( 'CONVERTKIT_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
29 -define( 'CONVERTKIT_PLUGIN_PATH', __DIR__ );
30 -define( 'CONVERTKIT_PLUGIN_VERSION', '3.3.8' );
31 -define( 'CONVERTKIT_OAUTH_CLIENT_ID', 'HXZlOCj-K5r0ufuWCtyoyo3f688VmMAYSsKg1eGvw0Y' );
32 -define( 'CONVERTKIT_OAUTH_CLIENT_REDIRECT_URI', 'https://app.kit.com/wordpress/redirect' );
14 +if(!class_exists('WP_ConvertKit')) {
15 + /**
16 + * Class WP_ConvertKit
17 + */
18 + class WP_ConvertKit {
33 19
34 -// Load shared classes, if they have not been included by another Kit Plugin.
35 -if ( ! trait_exists( 'ConvertKit_API_Traits' ) && ! trait_exists( 'ConvertKit_API\ConvertKit_API_Traits' ) ) {
36 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-api-traits.php';
37 -}
38 -if ( ! class_exists( 'ConvertKit_API_V4' ) ) {
39 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-api-v4.php';
40 -}
41 -if ( ! class_exists( 'ConvertKit_Log' ) ) {
42 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-log.php';
43 -}
44 -if ( ! class_exists( 'ConvertKit_Resource_V4' ) ) {
45 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-resource-v4.php';
46 -}
47 -if ( ! class_exists( 'ConvertKit_Review_Request' ) ) {
48 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-review-request.php';
49 -}
20 + const VERSION = '1.4.1';
50 21
51 -// Load plugin files that are always required.
52 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/cron-functions.php';
53 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/functions.php';
54 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-wp-convertkit.php';
55 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-admin-notices.php';
56 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-broadcasts-exporter.php';
57 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-broadcasts-importer.php';
58 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-cache-plugins.php';
59 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-cron.php';
60 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-form-entries.php';
61 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-gutenberg.php';
62 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-html-parser.php';
63 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-media-library.php';
64 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-output.php';
65 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-output-broadcasts.php';
66 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-output-restrict-content.php';
67 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-post.php';
68 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-preview-output.php';
69 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-cloudflare-turnstile.php';
70 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-recaptcha.php';
71 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-spam-protection.php';
72 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-account.php';
73 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-creator-network-recommendations.php';
74 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-restrict-content-cache.php';
75 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-custom-fields.php';
76 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-forms.php';
77 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-landing-pages.php';
78 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-posts.php';
79 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-products.php';
80 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-sequences.php';
81 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-tags.php';
82 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-settings.php';
83 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-settings-broadcasts.php';
84 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-settings-restrict-content.php';
85 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-setup.php';
86 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-shortcodes.php';
87 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-subscriber.php';
88 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-term.php';
89 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-user.php';
90 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-widgets.php';
91 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block.php';
92 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-broadcasts.php';
93 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-content.php';
94 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-trigger.php';
95 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form.php';
96 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-builder.php';
97 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-builder-field.php';
98 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-builder-field-email.php';
99 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-builder-field-name.php';
100 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-builder-field-custom.php';
101 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-product.php';
102 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter.php';
103 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter-form-link.php';
104 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter-product-link.php';
105 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/plugin-sidebars/class-convertkit-plugin-sidebar.php';
106 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/plugin-sidebars/class-convertkit-plugin-sidebar-post-settings.php';
107 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/pre-publish-actions/class-convertkit-pre-publish-action.php';
108 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/pre-publish-actions/class-convertkit-pre-publish-action-broadcast-export.php';
109 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/widgets/class-ck-widget-form.php';
22 + const POST_META_KEY = '_wp_convertkit_post_meta';
110 23
111 -// Admin classes.
112 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-bulk-edit.php';
113 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-quick-edit.php';
114 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-cache-plugins.php';
115 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-category.php';
116 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-landing-page.php';
117 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-legacy-resource-notice.php';
118 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-post.php';
119 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-refresh-resources.php';
120 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-restrict-content.php';
121 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-settings.php';
122 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-tinymce.php';
123 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-setup-wizard.php';
124 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-wp-list-table.php';
125 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer.php';
126 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-activecampaign.php';
127 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-aweber.php';
128 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-campaignmonitor.php';
129 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-convertkit-legacy-forms.php';
130 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-mc4wp.php';
131 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-mailpoet.php';
132 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/importers/class-convertkit-admin-importer-newsletter.php';
133 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-base.php';
134 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-broadcasts.php';
135 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-form-entries.php';
136 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-general.php';
137 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-oauth.php';
138 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-restrict-content.php';
139 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-admin-section-tools.php';
140 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/setup-wizard/class-convertkit-admin-setup-wizard-plugin.php';
141 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/setup-wizard/class-convertkit-admin-setup-wizard-landing-page.php';
142 -require_once CONVERTKIT_PLUGIN_PATH . '/admin/setup-wizard/class-convertkit-admin-setup-wizard-restrict-content.php';
24 + const SETTINGS_NAME = '_wp_convertkit_settings';
143 25
144 -// Contact Form 7 Integration.
145 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7-admin-section.php';
146 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7.php';
147 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7-settings.php';
26 + const SETTINGS_PAGE_SLUG = '_wp_convertkit_settings';
148 27
149 -// Divi Integration.
150 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/divi/class-convertkit-divi.php';
28 + /** @var ConvertKitAPI */
29 + private static $api;
151 30
152 -// Elementor Integration.
153 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/elementor/class-convertkit-elementor.php';
31 + /** @var int Data Caching */
32 + private static $cache_period = 0;
154 33
155 -// Forminator Integration.
156 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/forminator/class-convertkit-forminator-admin-section.php';
157 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/forminator/class-convertkit-forminator.php';
158 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/forminator/class-convertkit-forminator-settings.php';
34 + /** @var null */
35 + private static $meta_defaults = null;
159 36
160 -// Impeka Integration.
161 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/class-convertkit-impeka.php';
37 + /** @var array */
38 + private static $settings_defaults = array(
39 + 'api_key' => '',
40 + 'default_form' => 0,
41 + );
162 42
163 -// Uncode Integration.
164 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/class-convertkit-uncode.php';
43 + /** @var array */
44 + private static $forms_markup = array();
165 45
166 -// WishList Member Integration.
167 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist-admin-section.php';
168 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist.php';
169 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist-settings.php';
46 + /** @var array */
47 + private static $landing_pages_markup = array();
170 48
171 -// WooCommerce Integration.
172 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/woocommerce/class-convertkit-woocommerce-product-form.php';
49 + /** @var string */
50 + private static $forms_version = '5';
173 51
174 -// Register Plugin activation and deactivation functions.
175 -register_activation_hook( __FILE__, 'convertkit_plugin_activate' );
176 -add_action( 'wp_insert_site', 'convertkit_plugin_activate_new_site' );
177 -add_action( 'activate_blog', 'convertkit_plugin_activate_new_site' );
178 -register_deactivation_hook( __FILE__, 'convertkit_plugin_deactivate' );
52 + /**
53 + * Initialize the class
54 + */
55 + public static function init() {
56 + self::add_actions();
57 + self::add_filters();
58 + self::register_shortcodes();
179 59
180 -/**
181 - * Main function to return Plugin instance.
182 - *
183 - * @since 1.9.6
184 - */
185 -function WP_ConvertKit() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
60 + self::$cache_period = MINUTE_IN_SECONDS * 10;
186 61
187 - return WP_ConvertKit::get_instance();
62 + self::_api_connect();
63 + }
188 64
65 + /**
66 + * Add WP Actions
67 + */
68 + private static function add_actions() {
69 + if(is_admin()) {
70 + add_action('add_meta_boxes_page', array(__CLASS__, 'add_meta_boxes'));
71 + add_action('add_meta_boxes_post', array(__CLASS__, 'add_meta_boxes'));
72 + } else {
73 + add_action('template_redirect', array(__CLASS__, 'page_takeover'));
74 + }
75 +
76 + add_action('save_post', array(__CLASS__, 'save_post_meta'), 10, 2);
77 +
78 + add_action('init', array(__CLASS__, 'upgrade') , 10);
79 + }
80 +
81 + /**
82 + * Add WP Filters
83 + */
84 + private static function add_filters() {
85 + if(!is_admin()) {
86 + add_filter('the_content', array(__CLASS__, 'append_form'));
87 + }
88 +
89 + add_filter('plugin_action_links_' . plugin_basename(__FILE__), array(__CLASS__, 'add_settings_page_link'));
90 + }
91 +
92 + /**
93 + * Register ConvertKit shortcodes
94 + */
95 + private static function register_shortcodes() {
96 + add_shortcode('convertkit', array(__CLASS__, 'shortcode'));
97 + }
98 +
99 + /**
100 + * Plugin action links callback
101 + *
102 + * @param $links
103 + * @return array
104 + */
105 + public static function add_settings_page_link($links) {
106 + $settings_link = sprintf('<a href="%s">%s</a>', self::_get_settings_page_link(), __('Settings'));
107 +
108 + return array('settings' => $settings_link) + $links;
109 + }
110 +
111 + /**
112 + * Add Meta Boxes callback
113 + *
114 + * @param $post
115 + */
116 + public static function add_meta_boxes($post) {
117 + $forms = self::$api->get_resources('forms');
118 + $landing_pages = self::$api->get_resources('landing_pages');
119 +
120 + if(!empty($forms) || ('page' === $post->post_type && !empty($landing_pages))) {
121 + add_meta_box('wp-convertkit-meta-box', __('ConvertKit'), array(__CLASS__, 'display_meta_box'), $post->post_type, 'normal');
122 + }
123 + }
124 +
125 + /**
126 + * Metabox callback
127 + *
128 + * @param $post
129 + */
130 + public static function display_meta_box($post) {
131 + $forms = self::$api->get_resources('forms');
132 + $landing_pages = self::$api->get_resources('landing_pages');
133 +
134 + $meta = self::_get_meta($post->ID);
135 + $settings_link = self::_get_settings_page_link();
136 +
137 + include('views/backend/meta-boxes/meta-box.php');
138 + }
139 +
140 + /**
141 + * Save post meta callback
142 + *
143 + * @param $post_id
144 + * @param $post
145 + */
146 + public static function save_post_meta($post_id, $post) {
147 + $data = stripslashes_deep($_POST);
148 + if(wp_is_post_autosave($post_id) || wp_is_post_revision($post_id) || !isset($data['wp-convertkit-save-meta-nonce']) || !wp_verify_nonce($data['wp-convertkit-save-meta-nonce'], 'wp-convertkit-save-meta')) {
149 + return;
150 + }
151 +
152 + self::_set_meta($post_id, $data['wp-convertkit']);
153 + }
154 +
155 + /**
156 + * Page/Post display callback
157 + *
158 + * @param $content
159 + * @return string
160 + */
161 + public static function append_form( $content ) {
162 +
163 + if(is_singular(array('post')) || is_page()) {
164 +
165 + $attributes = self::_get_meta( get_the_ID() );
166 +
167 + $form_id = 0;
168 +
169 + if ( isset( $attributes['form'] ) && ( 0 < $attributes['form'] ) ) {
170 + $form_id = $attributes['form'];
171 + } else {
172 + if ( -1 == $attributes['form'] )
173 + $form_id = self::_get_settings('default_form');
174 + }
175 +
176 + if ( 0 < $form_id ) {
177 + $url = add_query_arg( array(
178 + 'api_key' => self::_get_settings( 'api_key' ),
179 + 'v' => self::$forms_version,
180 + ),
181 + 'https://forms.convertkit.com/' . $form_id . '.html'
182 + );
183 +
184 + $form_markup = self::$api->get_resource( $url );
185 + $content .= $form_markup;
186 + }
187 + }
188 +
189 + return $content;
190 + }
191 +
192 + /**
193 + * Replace page content if a landing_page is set
194 + */
195 + public static function page_takeover() {
196 + $queried_object = get_queried_object();
197 + if(isset($queried_object->post_type)
198 + && 'page' === $queried_object->post_type
199 + && ($landing_page_url = self::_get_meta($queried_object->ID, 'landing_page'))) {
200 + $landing_page = self::$api->get_resource($landing_page_url);
201 +
202 + if(!empty($landing_page)) {
203 + echo $landing_page;
204 + exit;
205 + }
206 + }
207 +
208 + }
209 +
210 + /**
211 + * Shortcode callback
212 + *
213 + * @param $attributes
214 + * @param null $content
215 + * @return mixed|void
216 + */
217 + public static function shortcode($attributes, $content = null) {
218 +
219 + if ( isset( $attributes['id'] ) ) {
220 + $form_id = $attributes['id'];
221 + $url = add_query_arg( array(
222 + 'api_key' => self::_get_settings( 'api_key' ),
223 + 'v' => self::$forms_version,
224 + ),
225 + 'https://forms.convertkit.com/' . $form_id . '.html'
226 + );
227 + } elseif ( isset( $attributes['form'] ) ) {
228 + $form_id = $attributes['form'];
229 + $url = add_query_arg( array(
230 + 'k' => self::_get_settings( 'api_key' ),
231 + 'v' => '2',
232 + ),
233 + 'https://api.convertkit.com/forms/' . $form_id . '/embed'
234 + );
235 + } else {
236 + $form_id = self::_get_settings( 'default_form' );
237 + $url = add_query_arg( array(
238 + 'api_key' => self::_get_settings( 'api_key' ),
239 + 'v' => self::$forms_version,
240 + ),
241 + 'https://forms.convertkit.com/' . $form_id . '.html'
242 + );
243 + }
244 +
245 + if ( 0 < $form_id ) {
246 + $form_markup = self::$api->get_resource( $url );
247 + } else {
248 + $form_markup = '';
249 + }
250 +
251 + return apply_filters('wp_convertkit_get_form_embed', $form_markup, $attributes );
252 + }
253 +
254 + /**
255 + * Retrieve meta
256 + *
257 + * @return array|null
258 + */
259 + private static function _get_meta_defaults() {
260 + if(is_null(self::$meta_defaults)) {
261 + self::$meta_defaults = array(
262 + 'form' => -1,
263 + 'landing_page' => '',
264 + );
265 + }
266 +
267 + return self::$meta_defaults;
268 + }
269 +
270 + /**
271 + * @param $post_id
272 + * @param null $meta_key
273 + *
274 + * @return array|bool
275 + */
276 + private static function _get_meta($post_id, $meta_key = null) {
277 + $post_id = empty($post_id) ? get_the_ID() : $post_id;
278 +
279 + $meta = get_post_meta($post_id, self::POST_META_KEY, true);
280 + $meta_defaults = self::_get_meta_defaults();
281 +
282 + if(empty($meta)) {
283 + $meta = $meta_defaults;
284 +
285 + $old_value = intval(get_post_meta($post_id, '_convertkit_convertkit_form', true));
286 + if(0 !== $old_value) {
287 + $meta['form'] = $old_value;
288 + }
289 + }
290 +
291 + $meta = shortcode_atts($meta_defaults, $meta);
292 +
293 + return is_null($meta_key) ? $meta : (isset($meta[$meta_key]) ? $meta[$meta_key] : false);
294 + }
295 +
296 + /**
297 + * @param $post_id
298 + * @param $meta
299 + *
300 + * @return mixed
301 + */
302 + private static function _set_meta($post_id, $meta) {
303 + $post_id = empty($post_id) ? get_the_ID() : $post_id;
304 +
305 + update_post_meta($post_id, self::POST_META_KEY, $meta);
306 +
307 + return $meta;
308 + }
309 +
310 + /**
311 + * Get plugin settings
312 + *
313 + * @param null $settings_key
314 + * @return mixed|null|void
315 + */
316 + private static function _get_settings($settings_key = null) {
317 + $settings = get_option(self::SETTINGS_NAME, self::$settings_defaults);
318 +
319 + return is_null($settings_key) ? $settings : (isset($settings[$settings_key]) ? $settings[$settings_key] : null);
320 + }
321 +
322 + /**
323 + * Get instance of ConvertKitAPI
324 + */
325 + private static function _api_connect() {
326 + $api_key = self::_get_settings('api_key');
327 + $api_secret = self::_get_settings('api_secret');
328 +
329 + self::$api = new ConvertKitAPI($api_key,$api_secret);
330 + }
331 +
332 + /**
333 + * Get link to the plugin settings page
334 + *
335 + * @param array $query_args
336 + * @return string
337 + */
338 + private static function _get_settings_page_link($query_args = array()) {
339 + $query_args = array('page' => self::SETTINGS_PAGE_SLUG) + $query_args;
340 +
341 + return add_query_arg($query_args, admin_url('options-general.php'));
342 + }
343 +
344 +
345 + /**
346 + * Run version specific upgrade.
347 + */
348 + public static function upgrade() {
349 +
350 + $current_version = get_option( 'convertkit_version' );
351 +
352 + if ( ! $current_version) {
353 +
354 + // Run 1.4.1 upgrade
355 + $settings = self::_get_settings( );
356 +
357 + if ( isset( $settings['api_key'] ) ) {
358 +
359 + // Get all posts and pages to track what has been updated
360 + $posts = get_option( '_wp_convertkit_upgrade_posts' );
361 +
362 + if ( ! $posts ) {
363 +
364 + $args = array(
365 + 'post_type' => array( 'post', 'page' ),
366 + 'fields' => 'ids',
367 + 'posts_per_page' => -1,
368 + );
369 +
370 + $result = new WP_Query( $args );
371 + if (! is_wp_error( $result ) ) {
372 + $posts = $result->posts;
373 + update_option( '_wp_convertkit_upgrade_posts', $posts );
374 + }
375 + }
376 +
377 + // Get form mappings
378 + $mappings = self::$api->get_resources('subscription_forms');;
379 +
380 + // 1. Update global form. Set 'api_version' so this is only done once.
381 + if ( ! isset( $settings['api_version'] ) ) {
382 + $old_form_id = $settings['default_form'];
383 + $settings['default_form'] = isset( $mappings[ $old_form_id ] ) ? $mappings[ $old_form_id ] : 0;
384 + $settings['api_version'] = 'v3';
385 + update_option( self::SETTINGS_NAME, $settings );
386 + }
387 +
388 + // 2. Scan posts/pages for _wp_convertkit_post_meta and update IDs
389 + // Scan content for shortcode and update
390 + // Remove page_id from posts array after page is updated.
391 + foreach ( $posts as $key => $post_id ) {
392 + $post_settings = get_post_meta( $post_id, '_wp_convertkit_post_meta', true );
393 +
394 + if ( isset( $post_settings['form'] ) && ( 0 < $post_settings['form'] ) )
395 + $post_settings['form'] = isset( $mappings[ $post_settings['form'] ] ) ? $mappings[ $post_settings['form'] ] : 0;
396 + if ( isset( $post_settings['landing_page'] ) && ( 0 < $post_settings['landing_page'] ) )
397 + $post_settings['landing_page'] = isset( $mappings[ $post_settings['landing_page'] ] ) ? $mappings[ $post_settings['landing_page'] ] : 0;
398 +
399 + update_post_meta( $post_id, '_wp_convertkit_post_meta', $post_settings );
400 +
401 + unset($posts[ $key ]);
402 + update_option( '_wp_convertkit_upgrade_posts', $posts );
403 + }
404 +
405 + // Done scanning posts, upgrade complete.
406 + if ( empty( $posts ) ) {
407 + update_option( 'convertkit_version', self::VERSION );
408 + delete_option( '_wp_convertkit_upgrade_posts' );
409 + }
410 +
411 + } else {
412 +
413 + update_option( 'convertkit_version', self::VERSION );
414 +
415 + }
416 +
417 + }
418 +
419 + }
420 + }
421 +
422 + WP_ConvertKit::init();
189 423 }
190 424
191 -// Finally, initialize the Plugin.
192 -WP_ConvertKit();
425 +include 'admin/settings.php';