PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 2.4.2
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v2.4.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/functions.php +36 -466 3.4.22.4.2 View file →
@@ -16,9 +16,8 @@
16 16 function convertkit_plugin_activate( $network_wide ) {
17 17
18 18 // Initialise Plugin.
19 19 $convertkit = WP_ConvertKit();
20 - $convertkit->initialize();
21 20
22 21 // Check if we are on a multisite install, activating network wide, or a single install.
23 22 if ( ! is_multisite() || ! $network_wide ) {
24 23 // Single Site activation.
@@ -58,9 +57,8 @@
58 57 }
59 58
60 59 // Initialise Plugin.
61 60 $convertkit = WP_ConvertKit();
62 - $convertkit->initialize();
63 61
64 62 // Run installation routine.
65 63 switch_to_blog( $site_or_blog_id );
66 64 $convertkit->get_class( 'setup' )->activate();
@@ -78,9 +76,8 @@
78 76 function convertkit_plugin_deactivate( $network_wide ) {
79 77
80 78 // Initialise Plugin.
81 79 $convertkit = WP_ConvertKit();
82 - $convertkit->initialize();
83 80
84 81 // Check if we are on a multisite install, activating network wide, or a single install.
85 82 if ( ! is_multisite() || ! $network_wide ) {
86 83 // Single Site activation.
@@ -109,32 +106,13 @@
109 106 * @return array Post Types
110 107 */
111 108 function convertkit_get_supported_post_types() {
112 109
113 - // Define supported Post Types.
114 110 $post_types = array(
115 111 'page',
116 112 'post',
117 113 );
118 114
119 - // If public Custom Post Types can be fetched, include them now.
120 - if ( function_exists( 'get_post_types' ) ) {
121 - // Get public Custom Post Types.
122 - $custom_post_types = (array) get_post_types(
123 - array(
124 - 'public' => true,
125 -
126 - // Don't include WordPress' built in Post Types, such as attachment, revisino and nav_menu_item.
127 - '_builtin' => false,
128 - )
129 - );
130 -
131 - $post_types = array_merge(
132 - $post_types,
133 - array_keys( $custom_post_types )
134 - );
135 - }
136 -
137 115 /**
138 116 * Defines the Post Types that support ConvertKit Forms.
139 117 *
140 118 * @since 1.9.6
@@ -147,40 +125,32 @@
147 125
148 126 }
149 127
150 128 /**
151 - * Determines whether the current user can create and publish the given Post Type.
152 - *
153 - * @since 3.3.9
154 - *
155 - * @param string $post_type Post Type.
156 - * @return bool User can create and publish Post Type.
157 - */
158 -function convertkit_user_can_create_published_post_type( $post_type ) {
159 -
160 - $post_type_object = get_post_type_object( $post_type );
161 -
162 - if ( ! $post_type_object ) {
163 - return false;
164 - }
165 -
166 - return current_user_can( $post_type_object->cap->create_posts ) && current_user_can( $post_type_object->cap->publish_posts );
167 -
168 -}
169 -
170 -/**
171 129 * Helper method to get supported Post Types for Restricted Content (Member's Content)
172 130 *
173 131 * @since 2.1.0
174 132 *
175 - * @deprecated 2.4.3 No longer used by internal code and not recommended. Use `convertkit_get_supported_post_types` instead.
176 - *
177 133 * @return array Post Types
178 134 */
179 135 function convertkit_get_supported_restrict_content_post_types() {
180 136
181 - return convertkit_get_supported_post_types();
137 + $post_types = array(
138 + 'page',
139 + 'post',
140 + );
182 141
142 + /**
143 + * Defines the Post Types that support Restricted Content / Members Content functionality.
144 + *
145 + * @since 2.0.0
146 + *
147 + * @param array $post_types Post Types
148 + */
149 + $post_types = apply_filters( 'convertkit_get_supported_restrict_content_post_types', $post_types );
150 +
151 + return $post_types;
152 +
183 153 }
184 154
185 155 /**
186 156 * Helper method to get registered Shortcodes.
@@ -254,32 +224,8 @@
254 224
255 225 }
256 226
257 227 /**
258 - * Helper method to get registered plugin sidebars.
259 - *
260 - * @since 3.3.0
261 - *
262 - * @return array Plugin sidebars
263 - */
264 -function convertkit_get_plugin_sidebars() {
265 -
266 - $plugin_sidebars = array();
267 -
268 - /**
269 - * Registers plugin sidebars for the WordPress block editor.
270 - *
271 - * @since 3.3.0
272 - *
273 - * @param array $plugin_sidebars Plugin sidebars.
274 - */
275 - $plugin_sidebars = apply_filters( 'convertkit_plugin_sidebars', $plugin_sidebars );
276 -
277 - return $plugin_sidebars;
278 -
279 -}
280 -
281 -/**
282 228 * Helper method to get registered pre-publish actions.
283 229 *
284 230 * @since 2.4.0
285 231 *
@@ -302,105 +248,8 @@
302 248
303 249 }
304 250
305 251 /**
306 - * Helper method to get registered importers that can replace third party
307 - * form shortcodes and blocks with Kit form shortcodes and blocks.
308 - *
309 - * @since 3.1.7
310 - *
311 - * @return array Importers.
312 - */
313 -function convertkit_get_form_importers() {
314 -
315 - $importers = array();
316 -
317 - /**
318 - * Registers form importers for the ConvertKit Plugin.
319 - *
320 - * @since 3.1.7
321 - *
322 - * @param array $importers Importers.
323 - */
324 - $importers = apply_filters( 'convertkit_get_form_importers', $importers );
325 -
326 - return $importers;
327 -
328 -}
329 -
330 -/**
331 - * Helper method to get registered abilities.
332 - *
333 - * @since 3.4.0
334 - *
335 - * @return array Abilities.
336 - */
337 -function convertkit_get_abilities() {
338 -
339 - $abilities = array();
340 -
341 - /**
342 - * Registers abilities for the Kit Plugin.
343 - *
344 - * @since 3.4.0
345 - *
346 - * @param array $abilities Abilities.
347 - */
348 - $abilities = apply_filters( 'convertkit_abilities', $abilities );
349 -
350 - return $abilities;
351 -
352 -}
353 -
354 -/**
355 - * Helper method to get registered MCP resources.
356 - *
357 - * @since 3.4.2
358 - *
359 - * @return array Resources.
360 - */
361 -function convertkit_get_resources() {
362 -
363 - $resources = array();
364 -
365 - /**
366 - * Registers MCP resources for the Kit Plugin.
367 - *
368 - * @since 3.4.2
369 - *
370 - * @param array $resources Resources.
371 - */
372 - $resources = apply_filters( 'convertkit_resources', $resources );
373 -
374 - return $resources;
375 -
376 -}
377 -
378 -/**
379 - * Helper method to get registered MCP prompts.
380 - *
381 - * @since 3.4.2
382 - *
383 - * @return array Prompts.
384 - */
385 -function convertkit_get_prompts() {
386 -
387 - $prompts = array();
388 -
389 - /**
390 - * Registers MCP prompts for the Kit Plugin.
391 - *
392 - * @since 3.4.2
393 - *
394 - * @param array $prompts Prompts.
395 - */
396 - $prompts = apply_filters( 'convertkit_prompts', $prompts );
397 -
398 - return $prompts;
399 -
400 -}
401 -
402 -/**
403 252 * Helper method to return the Plugin Settings Link
404 253 *
405 254 * @since 1.9.6
406 255 *
@@ -455,9 +304,9 @@
455 304 'utm_source' => 'wordpress',
456 305 'utm_term' => get_locale(),
457 306 'utm_content' => 'convertkit',
458 307 ),
459 - 'https://app.kit.com/users/signup'
308 + 'https://app.convertkit.com/users/signup'
460 309 );
461 310
462 311 }
463 312
@@ -475,9 +324,9 @@
475 324 'utm_source' => 'wordpress',
476 325 'utm_term' => get_locale(),
477 326 'utm_content' => 'convertkit',
478 327 ),
479 - 'https://app.kit.com/'
328 + 'https://app.convertkit.com/'
480 329 );
481 330
482 331 }
483 332
@@ -495,21 +344,21 @@
495 344 'utm_source' => 'wordpress',
496 345 'utm_term' => get_locale(),
497 346 'utm_content' => 'convertkit',
498 347 ),
499 - 'https://app.kit.com/account_settings/billing/'
348 + 'https://app.convertkit.com/account_settings/billing/'
500 349 );
501 350
502 351 }
503 352
504 353 /**
505 - * Helper method to return the URL the user needs to visit on the ConvertKit app to create a new Form or Landing Page.
354 + * Helper method to return the URL the user needs to visit on the ConvertKit app to obtain their API Key and Secret.
506 355 *
507 - * @since 2.2.3
356 + * @since 1.9.6.1
508 357 *
509 - * @return string ConvertKit App URL
358 + * @return string ConvertKit App URL.
510 359 */
511 -function convertkit_get_new_form_url() {
360 +function convertkit_get_api_key_url() {
512 361
513 362 return add_query_arg(
514 363 array(
515 364 'utm_source' => 'wordpress',
@@ -515,21 +364,21 @@
515 364 'utm_source' => 'wordpress',
516 365 'utm_term' => get_locale(),
517 366 'utm_content' => 'convertkit',
518 367 ),
519 - 'https://app.kit.com/forms/new/'
368 + 'https://app.convertkit.com/account_settings/advanced_settings/'
520 369 );
521 370
522 371 }
523 372
524 373 /**
525 - * Helper method to return the URL the user needs to visit to edit ConvertKit forms.
374 + * Helper method to return the URL the user needs to visit on the ConvertKit app to create a new Form or Landing Page.
526 375 *
527 376 * @since 2.2.3
528 377 *
529 - * @return string ConvertKit Form Editor URL.
378 + * @return string ConvertKit App URL
530 379 */
531 -function convertkit_get_form_editor_url() {
380 +function convertkit_get_new_form_url() {
532 381
533 382 return add_query_arg(
534 383 array(
535 384 'utm_source' => 'wordpress',
@@ -535,21 +384,21 @@
535 384 'utm_source' => 'wordpress',
536 385 'utm_term' => get_locale(),
537 386 'utm_content' => 'convertkit',
538 387 ),
539 - 'https://app.kit.com/forms'
388 + 'https://app.convertkit.com/forms/new/'
540 389 );
541 390
542 391 }
543 392
544 393 /**
545 - * Helper method to return the URL the user needs to visit on the ConvertKit app to create a new Landing Page.
394 + * Helper method to return the URL the user needs to visit to edit ConvertKit forms.
546 395 *
547 - * @since 2.5.5
396 + * @since 2.2.3
548 397 *
549 - * @return string ConvertKit App URL
398 + * @return string ConvertKit Form Editor URL.
550 399 */
551 -function convertkit_get_new_landing_page_url() {
400 +function convertkit_get_form_editor_url() {
552 401
553 402 return add_query_arg(
554 403 array(
555 404 'utm_source' => 'wordpress',
@@ -555,9 +404,9 @@
555 404 'utm_source' => 'wordpress',
556 405 'utm_term' => get_locale(),
557 406 'utm_content' => 'convertkit',
558 407 ),
559 - 'https://app.kit.com/pages/new/'
408 + 'https://app.convertkit.com/forms'
560 409 );
561 410
562 411 }
563 412
@@ -575,9 +424,9 @@
575 424 'utm_source' => 'wordpress',
576 425 'utm_term' => get_locale(),
577 426 'utm_content' => 'convertkit',
578 427 ),
579 - 'https://app.kit.com/subscribers/'
428 + 'https://app.convertkit.com/subscribers/'
580 429 );
581 430
582 431 }
583 432
@@ -595,9 +444,9 @@
595 444 'utm_source' => 'wordpress',
596 445 'utm_term' => get_locale(),
597 446 'utm_content' => 'convertkit',
598 447 ),
599 - 'https://app.kit.com/campaigns/'
448 + 'https://app.convertkit.com/campaigns/'
600 449 );
601 450
602 451 }
603 452
@@ -617,9 +466,9 @@
617 466 'utm_term' => get_locale(),
618 467 'utm_content' => 'convertkit',
619 468 ),
620 469 sprintf(
621 - 'https://app.kit.com/campaigns/%s/draft',
470 + 'https://app.convertkit.com/campaigns/%s/draft',
622 471 $broadcast_id
623 472 )
624 473 );
625 474
@@ -639,42 +488,14 @@
639 488 'utm_source' => 'wordpress',
640 489 'utm_term' => get_locale(),
641 490 'utm_content' => 'convertkit',
642 491 ),
643 - 'https://app.kit.com/products/new/'
492 + 'https://app.convertkit.com/products/new/'
644 493 );
645 494
646 495 }
647 496
648 497 /**
649 - * Helper method to enqueue the frontend CSS file.
650 - *
651 - * @since 3.2.0
652 - */
653 -function convertkit_enqueue_frontend_css() {
654 -
655 - wp_enqueue_style( 'convertkit-frontend', CONVERTKIT_PLUGIN_URL . 'resources/frontend/css/frontend.css', array(), CONVERTKIT_PLUGIN_VERSION );
656 -
657 -}
658 -
659 -/**
660 - * Helper method to enqueue the frontend JS file.
661 - *
662 - * @since 3.2.0
663 - */
664 -function convertkit_enqueue_frontend_js() {
665 -
666 - wp_enqueue_script(
667 - 'convertkit-js',
668 - CONVERTKIT_PLUGIN_URL . 'resources/frontend/js/dist/frontend.min.js',
669 - array(),
670 - CONVERTKIT_PLUGIN_VERSION,
671 - true
672 - );
673 -
674 -}
675 -
676 -/**
677 498 * Helper method to enqueue Select2 scripts for use within the ConvertKit Plugin.
678 499 *
679 500 * @since 1.9.6.4
680 501 */
@@ -723,255 +544,4 @@
723 544 // Return file's contents.
724 545 return $contents;
725 546
726 547 }
727 -
728 -/**
729 - * Returns a dropdown field commonly used for settings, comprising of:
730 - * - Do not subscribe
731 - * - Subscribe
732 - * - Subscribe to Form
733 - *
734 - * @since 2.5.2
735 - *
736 - * @param string $name Field name.
737 - * @param string $value Field value.
738 - * @param string $id Field ID attribute.
739 - * @param string $css_class Field CSS class(es).
740 - * @param string $context Resource context.
741 - * @param bool|array $additional_options Additional <option> key/value pairs.
742 - */
743 -function convertkit_get_subscription_dropdown_field( $name, $value, $id, $css_class = '', $context = '', $additional_options = false ) { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter
744 -
745 - // Load resource classes.
746 - $forms = new ConvertKit_Resource_Forms( $context );
747 - $tags = new ConvertKit_Resource_Tags( $context );
748 - $sequences = new ConvertKit_Resource_Sequences( $context );
749 -
750 - ob_start();
751 - include CONVERTKIT_PLUGIN_PATH . '/views/backend/subscription-dropdown-field.php';
752 - $output = trim( ob_get_clean() );
753 -
754 - // Return output.
755 - return $output;
756 -
757 -}
758 -
759 -/**
760 - * Helper method to safely call get_current_screen(), returning false
761 - * if the function is not available or returns null.
762 - *
763 - * Otherwise returns the given WP_Screen property.
764 - *
765 - * @since 2.5.9
766 - *
767 - * @param string $property WP_Screen property to return.
768 - * @return bool|string
769 - */
770 -function convertkit_get_current_screen( $property ) {
771 -
772 - // Bail if we cannot determine the screen.
773 - if ( ! function_exists( 'get_current_screen' ) ) {
774 - return false;
775 - }
776 -
777 - // Get screen.
778 - $screen = get_current_screen();
779 -
780 - // Bail if the screen couldn't be determined.
781 - if ( is_null( $screen ) ) {
782 - return false;
783 - }
784 -
785 - // Return property.
786 - return $screen->$property;
787 -
788 -}
789 -
790 -/**
791 - * Outputs the Intercom help widget script.
792 - *
793 - * @since 2.7.2
794 - */
795 -function convertkit_output_intercom_messenger() {
796 -
797 - ?>
798 - <script>
799 - const KIT_INTERCOM_APP_ID = 'e4n3xtxz';
800 - window.intercomSettings = {
801 - api_base: 'https://api-iam.intercom.io',
802 - app_id: KIT_INTERCOM_APP_ID
803 - };
804 - </script>
805 -
806 - <script>
807 - (function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/' + KIT_INTERCOM_APP_ID;var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);};if(document.readyState==='complete'){l();}else if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();
808 - </script>
809 - <?php
810 -
811 -}
812 -
813 -/**
814 - * Checks if the given Theme is active.
815 - *
816 - * @since 3.1.4
817 - *
818 - * @param string $theme_name Theme name.
819 - * @return bool
820 - */
821 -function convertkit_is_theme_active( $theme_name ) {
822 -
823 - // Assume Theme isn't active if we can't detect it.
824 - if ( ! function_exists( 'wp_get_theme' ) ) {
825 - return false;
826 - }
827 -
828 - // Check the Parent Theme if we're on a Child Theme.
829 - if ( wp_get_theme()->parent() ) {
830 - $theme = wp_get_theme()->parent();
831 - } else {
832 - $theme = wp_get_theme();
833 - }
834 -
835 - return strtolower( $theme->get( 'Name' ) ) === strtolower( $theme_name );
836 -
837 -}
838 -
839 -/**
840 - * Returns permitted HTML output when using wp_kses( ..., convertkit_kses_allowed_html()).
841 - *
842 - * @since 2.8.5
843 - */
844 -function convertkit_kses_allowed_html() {
845 -
846 - // Get WordPress' permitted HTML elements.
847 - $elements = wp_kses_allowed_html( 'post' );
848 -
849 - // Add form elements.
850 - $form_elements = array(
851 - 'input' => array(
852 - 'type' => true,
853 - 'id' => true,
854 - 'name' => true,
855 - 'class' => true,
856 - 'value' => true,
857 - 'checked' => true,
858 - 'min' => true,
859 - 'max' => true,
860 - 'step' => true,
861 - 'data-*' => true,
862 - ),
863 - 'select' => array(
864 - 'id' => true,
865 - 'name' => true,
866 - 'class' => true,
867 - 'size' => true,
868 - 'multiple' => true,
869 - 'data-*' => true,
870 - ),
871 - 'option' => array(
872 - 'value' => true,
873 - 'selected' => true,
874 - 'data-*' => true,
875 - ),
876 - 'optgroup' => array(
877 - 'label' => true,
878 - 'data-*' => true,
879 - ),
880 - 'label' => array(
881 - 'for' => true,
882 - ),
883 - );
884 -
885 - return array_merge( $elements, $form_elements );
886 -
887 -}
888 -
889 -/**
890 - * Saves the new access token, refresh token and its expiry, and schedules
891 - * a WordPress Cron event to refresh the token on expiry.
892 - *
893 - * @since 3.1.1
894 - *
895 - * @param array $result New Access Token, Refresh Token and Expiry.
896 - * @param string $client_id OAuth Client ID used for the Access and Refresh Tokens.
897 - */
898 -function convertkit_maybe_update_credentials( $result, $client_id ) {
899 -
900 - // Don't save these credentials if they're not for this Client ID.
901 - // They're for another Kit Plugin that uses OAuth.
902 - if ( $client_id !== CONVERTKIT_OAUTH_CLIENT_ID ) {
903 - return;
904 - }
905 -
906 - $settings = new ConvertKit_Settings();
907 - $settings->update_credentials( $result );
908 -
909 -}
910 -
911 -/**
912 - * Deletes the stored access token, refresh token and its expiry from the Plugin settings,
913 - * and clears any existing scheduled WordPress Cron event to refresh the token on expiry,
914 - * when the user revokes the access token.
915 - *
916 - * @since 3.2.4
917 - *
918 - * @param string $client_id OAuth Client ID used for the Access and Refresh Tokens.
919 - */
920 -function convertkit_delete_credentials( $client_id ) {
921 -
922 - // Don't delete these credentials if they're not for this Client ID.
923 - // They're for another Kit Plugin that uses OAuth.
924 - if ( $client_id !== CONVERTKIT_OAUTH_CLIENT_ID ) {
925 - return;
926 - }
927 -
928 - // Delete Access and Refresh Tokens.
929 - $settings = new ConvertKit_Settings();
930 - $settings->delete_credentials();
931 -
932 -}
933 -
934 -/**
935 - * Deletes the stored access token, refresh token and its expiry from the Plugin settings,
936 - * and clears any existing scheduled WordPress Cron event to refresh the token on expiry,
937 - * when either:
938 - * - The access token is invalid
939 - * - The access token expired, and refreshing failed
940 - *
941 - * @since 3.1.1
942 - *
943 - * @param WP_Error $result Error result.
944 - * @param string $client_id OAuth Client ID used for the Access and Refresh Tokens.
945 - */
946 -function convertkit_maybe_delete_credentials( $result, $client_id ) {
947 -
948 - // Don't save these credentials if they're not for this Client ID.
949 - // They're for another Kit Plugin that uses OAuth.
950 - if ( $client_id !== CONVERTKIT_OAUTH_CLIENT_ID ) {
951 - return;
952 - }
953 -
954 - // If the error isn't a 401, don't delete credentials.
955 - // This could be e.g. a temporary network error, rate limit or similar.
956 - if ( $result->get_error_data( 'convertkit_api_error' ) !== 401 ) {
957 - return;
958 - }
959 -
960 - // Persist an error notice in the WordPress Administration until the user fixes the problem.
961 - WP_ConvertKit()->get_class( 'admin_notices' )->add( 'authorization_failed' );
962 -
963 - $settings = new ConvertKit_Settings();
964 - $settings->delete_credentials();
965 -
966 -}
967 -
968 -// Update Access Token when refreshed by the API class.
969 -add_action( 'convertkit_api_get_access_token', 'convertkit_maybe_update_credentials', 10, 2 );
970 -add_action( 'convertkit_api_refresh_token', 'convertkit_maybe_update_credentials', 10, 2 );
971 -
972 -// Delete credentials when the user revokes the access and refresh tokens.
973 -add_action( 'convertkit_api_revoke_tokens', 'convertkit_delete_credentials', 10, 1 );
974 -
975 -// Delete credentials if the API class uses a invalid access token.
976 -// This prevents the Plugin making repetitive API requests that will 401.
977 -add_action( 'convertkit_api_access_token_invalid', 'convertkit_maybe_delete_credentials', 10, 2 );