PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 3.4.3
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v3.4.3
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 2.3.1 All 196 releases
← All changes | includes/class-convertkit-preview-output.php +112 -9 2.2.03.4.3 View file →
@@ -24,15 +24,20 @@
24 24 * @since 1.9.8.5
25 25 */
26 26 public function __construct() {
27 27
28 + // Preview inline forms.
28 29 add_filter( 'convertkit_output_append_form_to_content_form_id', array( $this, 'preview_form' ), 99999 );
30 +
31 + // Preview non-inline forms.
32 + add_filter( 'template_redirect', array( $this, 'preview_non_inline_form' ) );
33 +
34 + // Append edit link to inline forms.
29 35 add_filter( 'convertkit_block_form_render', array( $this, 'maybe_append_edit_form_link_to_form_block' ), 10, 3 );
30 36 add_filter( 'convertkit_frontend_append_form', array( $this, 'maybe_append_edit_form_link_to_form' ), 10, 4 );
31 37
32 38 }
33 39
34 -
35 40 /**
36 41 * Changes the form to display for the given Post ID if the request is
37 42 * from a logged in user who has clicked a preview link in the Plugin Setup Wizard.
38 43 *
@@ -58,9 +63,9 @@
58 63 return $form_id;
59 64 }
60 65
61 66 // Determine the form to preview.
62 - $preview_form_id = (int) ( isset( $_REQUEST['convertkit_form_id'] ) ? sanitize_text_field( $_REQUEST['convertkit_form_id'] ) : 0 );
67 + $preview_form_id = ( isset( $_REQUEST['convertkit_form_id'] ) ? absint( wp_unslash( $_REQUEST['convertkit_form_id'] ) ) : 0 );
63 68
64 69 // Return.
65 70 return $preview_form_id;
66 71
@@ -66,8 +71,73 @@
66 71
67 72 }
68 73
69 74 /**
75 + * Adds non-inline form(s) for display if the request is from a logged in user who has clicked a preview link
76 + * and is viewing the home page.
77 + *
78 + * @since 2.3.3
79 + */
80 + public function preview_non_inline_form() {
81 +
82 + // Bail if not on the home page.
83 + if ( ! is_home() ) {
84 + return;
85 + }
86 +
87 + // Bail if the user isn't logged in.
88 + if ( ! is_user_logged_in() ) {
89 + return;
90 + }
91 +
92 + // Bail if no nonce field exists.
93 + if ( ! isset( $_REQUEST['convertkit-preview-form-nonce'] ) ) {
94 + return;
95 + }
96 +
97 + // Bail if the nonce verification fails.
98 + if ( ! wp_verify_nonce( sanitize_key( wp_unslash( $_REQUEST['convertkit-preview-form-nonce'] ) ), 'convertkit-preview-form' ) ) {
99 + return;
100 + }
101 +
102 + // Bail if no form(s) to preview.
103 + if ( ! isset( $_REQUEST['convertkit_form_id'] ) ) {
104 + return;
105 + }
106 +
107 + // Determine form ID(s) to preview.
108 + $convertkit_forms = new ConvertKit_Resource_Forms();
109 + $preview_form_ids = explode( ',', sanitize_text_field( wp_unslash( $_REQUEST['convertkit_form_id'] ) ) );
110 +
111 + foreach ( $preview_form_ids as $preview_form_id ) {
112 + // Get form.
113 + $form = $convertkit_forms->get_by_id( (int) $preview_form_id );
114 +
115 + // Bail if the Form doesn't exist (this shouldn't happen, but you never know).
116 + if ( ! $form ) {
117 + continue;
118 + }
119 +
120 + // Add the form to the scripts array so it is included in the preview.
121 + add_filter(
122 + 'convertkit_output_scripts_footer',
123 + function ( $scripts ) use ( $form ) {
124 +
125 + $scripts[] = array(
126 + 'async' => true,
127 + 'data-uid' => $form['uid'],
128 + 'src' => $form['embed_js'],
129 + );
130 +
131 + return $scripts;
132 +
133 + }
134 + );
135 + }
136 +
137 + }
138 +
139 + /**
70 140 * Returns the URL for the most recent published Post based on the supplied Post Type,
71 141 * with a preview form nonce included in the URL.
72 142 *
73 143 * @since 1.9.8.5
@@ -95,8 +165,27 @@
95 165
96 166 }
97 167
98 168 /**
169 + * Returns the URL for the home page, with a preview form nonce included in the URL.
170 + *
171 + * @since 2.3.3
172 + *
173 + * @return string
174 + */
175 + public function get_preview_form_home_url() {
176 +
177 + // Return preview URL.
178 + return add_query_arg(
179 + array(
180 + 'convertkit-preview-form-nonce' => $this->get_preview_form_nonce(),
181 + ),
182 + get_home_url()
183 + );
184 +
185 + }
186 +
187 + /**
99 188 * Appends an "Edit form in ConvertKit" link to the given ConvertKit Form block,
100 189 * if the request is to preview a Page and the logged in WordPress user can
101 190 * edit the Page.
102 191 *
@@ -177,16 +266,30 @@
177 266
178 267 // If no format array key is specified, this is a Legacy Form, which has a different edit URL on ConvertKit.
179 268 if ( ! array_key_exists( 'format', $form ) ) {
180 269 // Legacy Form.
181 - $link = sprintf(
182 - 'https://app.convertkit.com/landing_pages/%s/edit/?utm_source=wordpress&utm_content=convertkit',
183 - esc_attr( (string) $form_id )
270 + $link = add_query_arg(
271 + array(
272 + 'utm_source' => 'wordpress',
273 + 'utm_term' => get_locale(),
274 + 'utm_content' => 'convertkit',
275 + ),
276 + sprintf(
277 + 'https://app.kit.com/landing_pages/%s/edit/',
278 + esc_attr( (string) $form_id )
279 + )
184 280 );
185 281 } else {
186 - $link = sprintf(
187 - 'https://app.convertkit.com/forms/designers/%s/edit/?utm_source=wordpress&utm_content=convertkit',
188 - esc_attr( (string) $form_id )
282 + $link = add_query_arg(
283 + array(
284 + 'utm_source' => 'wordpress',
285 + 'utm_term' => get_locale(),
286 + 'utm_content' => 'convertkit',
287 + ),
288 + sprintf(
289 + 'https://app.kit.com/forms/designers/%s/edit/',
290 + esc_attr( (string) $form_id )
291 + )
189 292 );
190 293 }
191 294
192 295 // Append a link to edit the Form on ConvertKit.
@@ -192,9 +295,9 @@
192 295 // Append a link to edit the Form on ConvertKit.
193 296 $form_html .= sprintf(
194 297 '<div style="margin:0;padding:5px;text-align:right;font-size:13px;"><a href="%s" target="_blank">%s</a></div>',
195 298 esc_url( $link ),
196 - esc_html__( 'Edit form in ConvertKit', 'convertkit' )
299 + esc_html__( 'Edit form in Kit', 'convertkit' )
197 300 );
198 301
199 302 return $form_html;
200 303