PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 1.3.8
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v1.3.8
3.4.4 3.4.3 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 All 197 releases
← All changes | wp-convertkit.php +223 -121 2.2.21.3.8 View file →
@@ -1,141 +1,243 @@
1 1 <?php
2 -/**
3 - * ConvertKit WordPress Plugin.
4 - *
5 - * @package ConvertKit
6 - * @author ConvertKit
7 - *
8 - * @wordpress-plugin
9 - * Plugin Name: ConvertKit
10 - * Plugin URI: https://convertkit.com/
11 - * Description: Quickly and easily integrate ConvertKit forms into your site.
12 - * Version: 2.2.2
13 - * Author: ConvertKit
14 - * Author URI: https://convertkit.com/
15 - * Text Domain: convertkit
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.3.8
7 + Author: ConvertKit
8 + Author URI: http://convertkit.com/
16 9 */
17 10
18 -// Bail if ConvertKit is alread loaded.
19 -if ( class_exists( 'WP_ConvertKit' ) ) {
20 - return;
21 -}
11 +require_once plugin_dir_path( __FILE__ ) . "/lib/convertkit-api.php";
12 +require_once plugin_dir_path( __FILE__ ) . "/lib/integration/wishlist_member.php";
22 13
23 -// Define ConverKit Plugin paths and version number.
24 -define( 'CONVERTKIT_PLUGIN_NAME', 'ConvertKit' ); // Used for user-agent in API class.
25 -define( 'CONVERTKIT_PLUGIN_FILE', plugin_basename( __FILE__ ) );
26 -define( 'CONVERTKIT_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
27 -define( 'CONVERTKIT_PLUGIN_PATH', __DIR__ );
28 -define( 'CONVERTKIT_PLUGIN_VERSION', '2.2.2' );
14 +if(!class_exists('WP_ConvertKit')) {
15 + class WP_ConvertKit {
29 16
30 -// Load shared classes, if they have not been included by another ConvertKit Plugin.
31 -if ( ! class_exists( 'ConvertKit_API' ) ) {
32 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-api.php';
33 -}
34 -if ( ! class_exists( 'ConvertKit_Log' ) ) {
35 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-log.php';
36 -}
37 -if ( ! class_exists( 'ConvertKit_Resource' ) ) {
38 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-resource.php';
39 -}
40 -if ( ! class_exists( 'ConvertKit_Review_Request' ) ) {
41 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/convertkit/convertkit-wordpress-libraries/src/class-convertkit-review-request.php';
42 -}
17 + // Plugin Version
18 + const VERSION = '1.3.8';
43 19
44 -// Load plugin files that are always required.
45 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/cron-functions.php';
46 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/functions.php';
47 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-wp-convertkit.php';
48 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-ajax.php';
49 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-gutenberg.php';
50 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-output.php';
51 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-output-restrict-content.php';
52 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-post.php';
53 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-preview-output.php';
54 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-forms.php';
55 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-landing-pages.php';
56 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-posts.php';
57 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-products.php';
58 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-resource-tags.php';
59 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-settings.php';
60 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-settings-restrict-content.php';
61 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-setup.php';
62 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-shortcodes.php';
63 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-subscriber.php';
64 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-term.php';
65 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-user.php';
66 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/class-convertkit-widgets.php';
67 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block.php';
68 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-broadcasts.php';
69 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-content.php';
70 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form-trigger.php';
71 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-form.php';
72 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/blocks/class-convertkit-block-product.php';
73 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter.php';
74 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter-form-link.php';
75 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/block-formatters/class-convertkit-block-formatter-product-link.php';
76 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/widgets/class-ck-widget-form.php';
20 + // DB Keys
21 + const POST_META_KEY = '_wp_convertkit_post_meta';
22 + const SETTINGS_NAME = '_wp_convertkit_settings';
77 23
78 -// Contact Form 7 Integration.
79 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7.php';
80 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7-settings.php';
24 + // Page Slugs
25 + const SETTINGS_PAGE_SLUG = '_wp_convertkit_settings';
81 26
82 -// Elementor Integration.
83 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/elementor/class-convertkit-elementor.php';
27 + private static $api;
84 28
85 -// WishList Member Integration.
86 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist.php';
87 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist-settings.php';
29 + // Data Caching
30 + private static $cache_period = 0;
31 + private static $meta_defaults = null;
32 + private static $settings_defaults = array(
33 + 'api_key' => '',
34 + 'default_form' => 0,
35 + );
88 36
89 -// WooCommerce Integration.
90 -require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/woocommerce/class-convertkit-woocommerce-product-form.php';
37 + private static $forms_markup = array();
38 + private static $landing_pages_markup = array();
91 39
92 -// Load files that are only used in the WordPress Administration interface.
93 -if ( is_admin() ) {
94 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-bulk-edit.php';
95 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-quick-edit.php';
96 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-cache-plugins.php';
97 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-category.php';
98 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-notices.php';
99 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-post.php';
100 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-refresh-resources.php';
101 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-settings.php';
102 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-tinymce.php';
103 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-user.php';
104 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-setup-wizard.php';
105 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-multi-value-field-table.php';
106 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-settings-base.php';
107 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-settings-general.php';
108 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/section/class-convertkit-settings-tools.php';
109 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/setup-wizard/class-convertkit-admin-setup-wizard-plugin.php';
40 + public static function init() {
41 + self::add_actions();
42 + self::add_filters();
43 + self::register_shortcodes();
110 44
111 - // Contact Form 7 Integration.
112 - require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/contactform7/class-convertkit-contactform7-admin-settings.php';
45 + self::$cache_period = MINUTE_IN_SECONDS * 10;
113 46
114 - // WishList Member Integration.
115 - require_once CONVERTKIT_PLUGIN_PATH . '/includes/integrations/wishlist/class-convertkit-wishlist-admin-settings.php';
47 + self::_api_connect();
48 + }
116 49
117 - // Restrict Content Integration.
118 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-restrict-content.php';
119 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/class-convertkit-admin-settings-restrict-content.php';
120 - require_once CONVERTKIT_PLUGIN_PATH . '/admin/setup-wizard/class-convertkit-admin-setup-wizard-restrict-content.php';
121 -}
50 + private static function add_actions() {
51 + if(is_admin()) {
52 + add_action('add_meta_boxes_page', array(__CLASS__, 'add_meta_boxes'));
53 + add_action('add_meta_boxes_post', array(__CLASS__, 'add_meta_boxes'));
54 + } else {
55 + add_action('template_redirect', array(__CLASS__, 'page_takeover'));
56 + }
122 57
123 -// Register Plugin activation and deactivation functions.
124 -register_activation_hook( __FILE__, 'convertkit_plugin_activate' );
125 -add_action( 'wp_insert_site', 'convertkit_plugin_activate_new_site' );
126 -add_action( 'activate_blog', 'convertkit_plugin_activate_new_site' );
127 -register_deactivation_hook( __FILE__, 'convertkit_plugin_deactivate' );
58 + add_action('save_post', array(__CLASS__, 'save_post_meta'), 10, 2);
59 + }
128 60
129 -/**
130 - * Main function to return Plugin instance.
131 - *
132 - * @since 1.9.6
133 - */
134 -function WP_ConvertKit() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName
61 + private static function add_filters() {
62 + if(!is_admin()) {
63 + add_filter('the_content', array(__CLASS__, 'append_form'));
64 + }
135 65
136 - return WP_ConvertKit::get_instance();
66 + add_filter('plugin_action_links_' . plugin_basename(__FILE__), array(__CLASS__, 'add_settings_page_link'));
67 + }
137 68
69 + private static function register_shortcodes() {
70 + add_shortcode('convertkit', array(__CLASS__, 'shortcode'));
71 + }
72 +
73 + // Callbacks
74 +
75 + /// Settings Related
76 +
77 + public static function add_settings_page_link($links) {
78 + $settings_link = sprintf('<a href="%s">%s</a>', self::_get_settings_page_link(), __('Settings'));
79 +
80 + return array('settings' => $settings_link) + $links;
81 + }
82 +
83 + /// Page / Post Editing
84 +
85 + public static function add_meta_boxes($post) {
86 + $forms = self::$api->get_resources('forms');
87 + $landing_pages = self::$api->get_resources('landing_pages');
88 +
89 + if(!empty($forms) || ('page' === $post->post_type && !empty($landing_pages))) {
90 + add_meta_box('wp-convertkit-meta-box', __('ConvertKit'), array(__CLASS__, 'display_meta_box'), $post->post_type, 'normal');
91 + }
92 + }
93 +
94 + public static function display_meta_box($post) {
95 + $forms = self::$api->get_resources('forms');
96 + $landing_pages = self::$api->get_resources('landing_pages');
97 +
98 + $meta = self::_get_meta($post->ID);
99 + $settings_link = self::_get_settings_page_link();
100 +
101 + include('views/backend/meta-boxes/meta-box.php');
102 + }
103 +
104 + public static function save_post_meta($post_id, $post) {
105 + $data = stripslashes_deep($_POST);
106 + 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')) {
107 + return;
108 + }
109 +
110 + self::_set_meta($post_id, $data['wp-convertkit']);
111 + }
112 +
113 + /// Page / Post Display
114 +
115 + public static function append_form($content) {
116 + if(is_singular(array('post')) || is_page()) {
117 + $content .= wp_convertkit_get_form_embed(self::_get_meta(get_the_ID()));
118 + }
119 +
120 + return $content;
121 + }
122 +
123 + public static function page_takeover() {
124 + $queried_object = get_queried_object();
125 + if(isset($queried_object->post_type) && 'page' === $queried_object->post_type && ($landing_page_url = self::_get_meta($queried_object->ID, 'landing_page'))) {
126 + $landing_page = self::$api->get_resource($landing_page_url);
127 +
128 + if(!empty($landing_page)) {
129 + echo $landing_page;
130 + exit;
131 + }
132 + }
133 +
134 + }
135 +
136 + /// Shortcodes
137 +
138 + public static function shortcode($attributes, $content = null) {
139 + return wp_convertkit_get_form_embed($attributes);
140 + }
141 +
142 + // Data Retrieval
143 +
144 + /// Page / Post Meta Data
145 +
146 + private static function _get_meta_defaults() {
147 + if(is_null(self::$meta_defaults)) {
148 + self::$meta_defaults = array(
149 + 'form' => -1,
150 + 'landing_page' => '',
151 + );
152 + }
153 +
154 + return self::$meta_defaults;
155 + }
156 +
157 + private static function _get_meta($post_id, $meta_key = null) {
158 + $post_id = empty($post_id) ? get_the_ID() : $post_id;
159 +
160 + $meta = get_post_meta($post_id, self::POST_META_KEY, true);
161 + $meta_defaults = self::_get_meta_defaults();
162 +
163 + if(empty($meta)) {
164 + $meta = $meta_defaults;
165 +
166 + $old_value = intval(get_post_meta($post_id, '_convertkit_convertkit_form', true));
167 + if(0 !== $old_value) {
168 + $meta['form'] = $old_value;
169 + }
170 + }
171 +
172 + $meta = shortcode_atts($meta_defaults, $meta);
173 +
174 + return is_null($meta_key) ? $meta : (isset($meta[$meta_key]) ? $meta[$meta_key] : false);
175 + }
176 +
177 + private static function _set_meta($post_id, $meta) {
178 + $post_id = empty($post_id) ? get_the_ID() : $post_id;
179 +
180 + update_post_meta($post_id, self::POST_META_KEY, $meta);
181 +
182 + return $meta;
183 + }
184 +
185 + /// Settings
186 +
187 + private static function _get_settings($settings_key = null) {
188 + $settings = get_option(self::SETTINGS_NAME, self::$settings_defaults);
189 +
190 + return is_null($settings_key) ? $settings : (isset($settings[$settings_key]) ? $settings[$settings_key] : null);
191 + }
192 +
193 + /// API
194 +
195 + private static function _api_connect() {
196 + $api_key = self::_get_settings('api_key');
197 +
198 + self::$api = new ConvertKitAPI($api_key);
199 + }
200 +
201 + // Links
202 +
203 + private static function _get_settings_page_link($query_args = array()) {
204 + $query_args = array('page' => self::SETTINGS_PAGE_SLUG) + $query_args;
205 +
206 + return add_query_arg($query_args, admin_url('options-general.php'));
207 + }
208 +
209 + // Template Tags
210 +
211 + public static function get_form_embed($attributes) {
212 + $attributes = shortcode_atts(array(
213 + 'form' => -1,
214 + ), $attributes);
215 +
216 + extract($attributes);
217 +
218 + $form_id = intval(($form < 0) ? self::_get_settings('default_form') : $form);
219 + $form = false;
220 +
221 + if ($form_id == 0) {
222 + return "";
223 + }
224 +
225 + $forms_available = self::$api->get_resources('forms');
226 + foreach($forms_available as $form_available) {
227 + if($form_available['id'] == $form_id) {
228 + $form = $form_available;
229 + break;
230 + }
231 + }
232 +
233 + $form_markup = self::$api->get_resource($form['embed']);
234 +
235 + return $form_markup;
236 + }
237 + }
238 +
239 + require_once('lib/template-tags.php');
240 + WP_ConvertKit::init();
138 241 }
139 242
140 -// Finally, initialize the Plugin.
141 -WP_ConvertKit();
243 +include 'admin/settings.php';