PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 2.0.2
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v2.0.2
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 | includes/class-wp-convertkit.php +62 -129 3.4.22.0.2 View file →
@@ -20,9 +20,9 @@
20 20 * @since 1.9.6
21 21 *
22 22 * @var object
23 23 */
24 - private static $instance;
24 + public static $instance;
25 25
26 26 /**
27 27 * Holds singleton initialized classes that include
28 28 * action and filter hooks.
@@ -39,34 +39,18 @@
39 39 * @since 1.9.6
40 40 */
41 41 public function __construct() {
42 42
43 - // Initialize classes that have hooks prior to the `init` hook.
44 - // Divi Theme requires us to do this, although the Divi Builder Plugin works fine when loading
45 - // our integration on `init`.
46 - $this->classes['divi'] = new ConvertKit_Divi();
47 - $this->classes['widgets'] = new ConvertKit_Widgets();
48 -
49 - // Initialize Plugin classes on init, so the `_load_textdomain_just_in_time` warning isn't triggered.
50 - add_action( 'init', array( $this, 'initialize' ), 1 );
51 - add_action( 'init', array( $this, 'setup' ), 2 );
52 -
53 - }
54 -
55 - /**
56 - * Initialize classes.
57 - *
58 - * @since 2.7.7
59 - */
60 - public function initialize() {
61 -
43 + // Initialize class(es) to register hooks.
62 44 $this->initialize_admin();
63 45 $this->initialize_admin_or_frontend_editor();
64 46 $this->initialize_cli_cron();
65 47 $this->initialize_frontend();
66 48 $this->initialize_global();
67 - $this->initialize_mcp();
68 49
50 + // Load language files.
51 + add_action( 'init', array( $this, 'load_language_files' ) );
52 +
69 53 }
70 54
71 55 /**
72 56 * Initialize classes for the WordPress Administration interface
@@ -79,27 +63,17 @@
79 63 if ( ! is_admin() ) {
80 64 return;
81 65 }
82 66
83 - $this->classes['admin_bulk_edit'] = new ConvertKit_Admin_Bulk_Edit();
84 - $this->classes['admin_cache_plugins'] = new ConvertKit_Admin_Cache_Plugins();
85 - $this->classes['admin_category'] = new ConvertKit_Admin_Category();
86 - $this->classes['admin_landing_page'] = new ConvertKit_Admin_Landing_Page();
87 - $this->classes['admin_legacy_resource_notice'] = new ConvertKit_Admin_Legacy_Resource_Notice();
88 - $this->classes['admin_importer_activecampaign'] = new ConvertKit_Admin_Importer_ActiveCampaign();
89 - $this->classes['admin_importer_aweber'] = new ConvertKit_Admin_Importer_AWeber();
90 - $this->classes['admin_importer_campaignmonitor'] = new ConvertKit_Admin_Importer_CampaignMonitor();
91 - $this->classes['admin_importer_convertkit_legacy_forms'] = new ConvertKit_Admin_Importer_ConvertKit_Legacy_Forms();
92 - $this->classes['admin_importer_mc4wp'] = new ConvertKit_Admin_Importer_MC4WP();
93 - $this->classes['admin_importer_mailpoet'] = new ConvertKit_Admin_Importer_Mailpoet();
94 - $this->classes['admin_importer_newsletter'] = new ConvertKit_Admin_Importer_Newsletter();
95 - $this->classes['admin_post'] = new ConvertKit_Admin_Post();
96 - $this->classes['admin_quick_edit'] = new ConvertKit_Admin_Quick_Edit();
97 - $this->classes['admin_restrict_content'] = new ConvertKit_Admin_Restrict_Content();
98 - $this->classes['admin_settings'] = new ConvertKit_Admin_Settings();
99 - $this->classes['admin_setup_wizard_landing_page'] = new ConvertKit_Admin_Setup_Wizard_Landing_Page();
100 - $this->classes['admin_setup_wizard_plugin'] = new ConvertKit_Admin_Setup_Wizard_Plugin();
101 - $this->classes['admin_setup_wizard_restrict_content'] = new ConvertKit_Admin_Setup_Wizard_Restrict_Content();
67 + $this->classes['admin_bulk_edit'] = new ConvertKit_Admin_Bulk_Edit();
68 + $this->classes['admin_category'] = new ConvertKit_Admin_Category();
69 + $this->classes['admin_post'] = new ConvertKit_Admin_Post();
70 + $this->classes['admin_quick_edit'] = new ConvertKit_Admin_Quick_Edit();
71 + $this->classes['admin_refresh_resources'] = new ConvertKit_Admin_Refresh_Resources();
72 + $this->classes['admin_settings'] = new ConvertKit_Admin_Settings();
73 + $this->classes['admin_setup_wizard_plugin'] = new ConvertKit_Admin_Setup_Wizard_Plugin();
74 + $this->classes['admin_tinymce'] = new ConvertKit_Admin_TinyMCE();
75 + $this->classes['admin_user'] = new ConvertKit_Admin_User();
102 76
103 77 /**
104 78 * Initialize integration classes for the WordPress Administration interface.
105 79 *
@@ -162,11 +136,9 @@
162 136 if ( is_admin() ) {
163 137 return;
164 138 }
165 139
166 - $this->classes['cache_plugins'] = new ConvertKit_Cache_Plugins();
167 - $this->classes['output'] = new ConvertKit_Output();
168 - $this->classes['output_broadcasts'] = new ConvertKit_Output_Broadcasts();
140 + $this->classes['output'] = new ConvertKit_Output();
169 141
170 142 /**
171 143 * Initialize integration classes for the frontend web site.
172 144 *
@@ -183,37 +155,27 @@
183 155 * @since 1.9.6
184 156 */
185 157 private function initialize_global() {
186 158
187 - $this->classes['admin_notices'] = new ConvertKit_Admin_Notices();
188 - $this->classes['admin_tinymce'] = new ConvertKit_Admin_TinyMCE();
189 - $this->classes['admin_refresh_resources'] = new ConvertKit_Admin_Refresh_Resources();
190 - $this->classes['blocks_convertkit_broadcasts'] = new ConvertKit_Block_Broadcasts();
191 - $this->classes['blocks_convertkit_content'] = new ConvertKit_Block_Content();
192 - $this->classes['blocks_convertkit_formtrigger'] = new ConvertKit_Block_Form_Trigger();
193 - $this->classes['blocks_convertkit_form'] = new ConvertKit_Block_Form();
194 - $this->classes['blocks_convertkit_form_builder'] = new ConvertKit_Block_Form_Builder();
195 - $this->classes['blocks_convertkit_form_builder_field_email'] = new ConvertKit_Block_Form_Builder_Field_Email();
196 - $this->classes['blocks_convertkit_form_builder_field_name'] = new ConvertKit_Block_Form_Builder_Field_Name();
197 - $this->classes['blocks_convertkit_form_builder_field_custom'] = new ConvertKit_Block_Form_Builder_Field_Custom();
198 - $this->classes['blocks_convertkit_product'] = new ConvertKit_Block_Product();
199 - $this->classes['block_formatter_form_link'] = new ConvertKit_Block_Formatter_Form_Link();
200 - $this->classes['block_formatter_product_link'] = new ConvertKit_Block_Formatter_Product_Link();
201 - $this->classes['pre_publish_action_broadcast_export'] = new ConvertKit_Pre_Publish_Action_Broadcast_Export();
202 - $this->classes['plugin_sidebar_post_settings'] = new ConvertKit_Plugin_Sidebar_Post_Settings();
203 - $this->classes['broadcasts_exporter'] = new ConvertKit_Broadcasts_Exporter();
204 - $this->classes['broadcasts_importer'] = new ConvertKit_Broadcasts_Importer();
205 - $this->classes['elementor'] = new ConvertKit_Elementor();
206 - $this->classes['gutenberg'] = new ConvertKit_Gutenberg();
207 - $this->classes['mcp'] = new ConvertKit_MCP();
208 - $this->classes['media_library'] = new ConvertKit_Media_Library();
209 - $this->classes['output_restrict_content'] = new ConvertKit_Output_Restrict_Content();
210 - $this->classes['restrict_content_cache'] = new ConvertKit_Restrict_Content_Cache();
211 - $this->classes['review_request'] = new ConvertKit_Review_Request( 'Kit', 'convertkit', CONVERTKIT_PLUGIN_PATH );
212 - $this->classes['preview_output'] = new ConvertKit_Preview_Output();
213 - $this->classes['setup'] = new ConvertKit_Setup();
214 - $this->classes['shortcodes'] = new ConvertKit_Shortcodes();
159 + $this->classes['ajax'] = new ConvertKit_AJAX();
160 + $this->classes['blocks_convertkit_broadcasts'] = new ConvertKit_Block_Broadcasts();
161 + $this->classes['blocks_convertkit_content'] = new ConvertKit_Block_Content();
162 + $this->classes['blocks_convertkit_product'] = new ConvertKit_Block_Product();
163 + $this->classes['blocks_convertkit_form'] = new ConvertKit_Block_Form();
164 + $this->classes['elementor'] = new ConvertKit_Elementor();
165 + $this->classes['gutenberg'] = new ConvertKit_Gutenberg();
166 + $this->classes['post_type_product'] = new ConvertKit_Post_Type_Product();
167 + $this->classes['review_request'] = new ConvertKit_Review_Request( 'ConvertKit', 'convertkit', CONVERTKIT_PLUGIN_PATH );
168 + $this->classes['preview_output'] = new ConvertKit_Preview_Output();
169 + $this->classes['setup'] = new ConvertKit_Setup();
170 + $this->classes['shortcodes'] = new ConvertKit_Shortcodes();
171 + $this->classes['widgets'] = new ConvertKit_Widgets();
215 172
173 + // Run the setup's update process on WordPress' init hook.
174 + // Doing this sooner may result in errors with WordPress functions that are not yet
175 + // available to the update routine.
176 + add_action( 'init', array( $this, 'update' ) );
177 +
216 178 /**
217 179 * Initialize integration classes for the frontend web site.
218 180 *
219 181 * @since 1.9.6
@@ -222,63 +184,16 @@
222 184
223 185 }
224 186
225 187 /**
226 - * Initializes the MCP server if enabled in the Plugin's settings.
227 - *
228 - * @since 3.4.0
229 - */
230 - public function initialize_mcp() {
231 -
232 - // Bail if the MCP server is not enabled.
233 - $settings = new ConvertKit_Settings_MCP();
234 - if ( ! $settings->enabled() ) {
235 - return;
236 - }
237 -
238 - // Bail if the Abilities API is unavailable (WordPress < 6.9).
239 - if ( ! function_exists( 'wp_register_ability' ) ) {
240 - return;
241 - }
242 -
243 - // Bail if PHP 7.4+ is not installed, as this is required for the MCP Adapter classes.
244 - if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
245 - return;
246 - }
247 -
248 - // Load MCP Adapter if another Plugin hasn't already loaded it.
249 - if ( ! class_exists( 'WP\\MCP\\Core\\McpAdapter' ) ) {
250 - // Bail if the WordPress MCP Adapter autoloader is missing.
251 - if ( ! file_exists( CONVERTKIT_PLUGIN_PATH . '/vendor/autoload.php' ) ) {
252 - return;
253 - }
254 -
255 - // Load MCP Adapter.
256 - require_once CONVERTKIT_PLUGIN_PATH . '/vendor/autoload.php';
257 -
258 - // Bail if the MCP Adapter class doesn't exist - something went wrong with the autoloader.
259 - if ( ! class_exists( 'WP\\MCP\\Core\\McpAdapter' ) ) { // @phpstan-ignore-line
260 - return;
261 - }
262 - }
263 -
264 - // Bootstrap the MCP Adapter, per WordPress/mcp-adapter's recommended
265 - // integration pattern.
266 - // @see https://github.com/WordPress/mcp-adapter#using-mcp-adapter-in-your-plugin.
267 - \WP\MCP\Core\McpAdapter::instance();
268 -
269 - }
270 -
271 - /**
272 - * Runs the Plugin's initialization and update routines, which checks if
188 + * Runs the Plugin's update routine, which checks if
273 189 * the Plugin has just been updated to a newer version,
274 190 * and if so runs any specific processes that might be needed.
275 191 *
276 192 * @since 1.9.7.4
277 193 */
278 - public function setup() {
194 + public function update() {
279 195
280 - $this->get_class( 'setup' )->initialize();
281 196 $this->get_class( 'setup' )->update();
282 197
283 198 }
284 199
@@ -298,15 +213,15 @@
298 213 }
299 214
300 215 // Pro.
301 216 if ( array_key_exists( 'REQUEST_URI', $_SERVER ) ) {
302 - if ( strpos( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/pro/' ) !== false ) {
217 + if ( strpos( sanitize_text_field( $_SERVER['REQUEST_URI'] ), '/pro/' ) !== false ) {
303 218 return true;
304 219 }
305 - if ( strpos( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), '/x/' ) !== false ) {
220 + if ( strpos( sanitize_text_field( $_SERVER['REQUEST_URI'] ), '/x/' ) !== false ) {
306 221 return true;
307 222 }
308 - if ( strpos( sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'cornerstone-endpoint' ) !== false ) {
223 + if ( strpos( sanitize_text_field( $_SERVER['REQUEST_URI'] ), 'cornerstone-endpoint' ) !== false ) {
309 224 return true;
310 225 }
311 226 }
312 227
@@ -338,9 +253,9 @@
338 253 return true;
339 254 }
340 255
341 256 // Elementor.
342 - if ( array_key_exists( 'action', $_REQUEST ) && sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) === 'elementor' ) {
257 + if ( array_key_exists( 'action', $_REQUEST ) && sanitize_text_field( $_REQUEST['action'] ) === 'elementor' ) {
343 258 return true;
344 259 }
345 260
346 261 // Kallyas.
@@ -368,9 +283,9 @@
368 283 return true;
369 284 }
370 285
371 286 // Zion Builder.
372 - if ( array_key_exists( 'action', $_REQUEST ) && sanitize_text_field( wp_unslash( $_REQUEST['action'] ) ) === 'zion_builder_active' ) {
287 + if ( array_key_exists( 'action', $_REQUEST ) && sanitize_text_field( $_REQUEST['action'] ) === 'zion_builder_active' ) {
373 288 return true;
374 289 }
375 290
376 291 // Assume we're not in the Administration interface.
@@ -422,13 +337,31 @@
422 337 * @return bool Is WP CRON Request
423 338 */
424 339 public function is_cron() {
425 340
426 - return wp_doing_cron();
341 + if ( ! defined( 'DOING_CRON' ) ) {
342 + return false;
343 + }
344 + if ( ! DOING_CRON ) {
345 + return false;
346 + }
427 347
348 + return true;
349 +
428 350 }
429 351
430 352 /**
353 + * Loads plugin textdomain
354 + *
355 + * @since 1.0.0
356 + */
357 + public function load_language_files() {
358 +
359 + load_plugin_textdomain( 'convertkit', false, basename( dirname( CONVERTKIT_PLUGIN_FILE ) ) . '/languages/' ); // @phpstan-ignore-line.
360 +
361 + }
362 +
363 + /**
431 364 * Returns the given class
432 365 *
433 366 * @since 1.9.6
434 367 *
@@ -444,9 +377,9 @@
444 377 $error = new WP_Error(
445 378 'convertkit_get_class',
446 379 sprintf(
447 380 /* translators: %1$s: PHP class name */
448 - __( 'Kit Error: Could not load Plugin class <strong>%1$s</strong>', 'convertkit' ),
381 + __( 'ConvertKit Error: Could not load Plugin class <strong>%1$s</strong>', 'convertkit' ),
449 382 $name
450 383 )
451 384 );
452 385
@@ -454,9 +387,9 @@
454 387 // Admin UI.
455 388 if ( is_admin() ) {
456 389 wp_die(
457 390 esc_attr( $error->get_error_message() ),
458 - esc_html__( 'Kit Error', 'convertkit' ),
391 + esc_html__( 'ConvertKit Error', 'convertkit' ),
459 392 array(
460 393 'back_link' => true,
461 394 )
462 395 );
@@ -479,9 +412,9 @@
479 412 * @return object Class.
480 413 */
481 414 public static function get_instance() {
482 415
483 - if ( null === self::$instance ) {
416 + if ( ! isset( self::$instance ) && ! ( self::$instance instanceof self ) ) { // @phpstan-ignore-line.
484 417 self::$instance = new self();
485 418 }
486 419
487 420 return self::$instance;