PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 3.4.5
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v3.4.5
3.4.5 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 All 198 releases
← All changes | includes/blocks/class-convertkit-block-broadcasts.php +252 -84 2.2.3 → 3.4.5 View file →
@@ -26,30 +26,87 @@
26 26
27 27 // Register this as a Gutenberg block in the ConvertKit Plugin.
28 28 add_filter( 'convertkit_blocks', array( $this, 'register' ) );
29 29
30 - // Enqueue scripts and styles for this Gutenberg Block in the editor view.
31 - add_action( 'convertkit_gutenberg_enqueue_scripts', array( $this, 'enqueue_scripts_editor' ) );
30 + // Register this block's MCP abilities.
31 + add_filter( 'convertkit_abilities', array( $this, 'register_abilities' ) );
32 32
33 33 // Enqueue scripts and styles for this Gutenberg Block in the editor and frontend views.
34 34 add_action( 'convertkit_gutenberg_enqueue_scripts_editor_and_frontend', array( $this, 'enqueue_scripts' ) );
35 35 add_action( 'convertkit_gutenberg_enqueue_styles_editor_and_frontend', array( $this, 'enqueue_styles' ) );
36 36
37 - // Render Broadcasts block via AJAX.
38 - add_action( 'wp_ajax_nopriv_convertkit_broadcasts_render', array( $this, 'render_ajax' ) );
39 - add_action( 'wp_ajax_convertkit_broadcasts_render', array( $this, 'render_ajax' ) );
37 + // Register REST API routes.
38 + add_action( 'rest_api_init', array( $this, 'register_routes' ) );
40 39
41 40 }
42 41
43 42 /**
44 - * Enqueues scripts for this Gutenberg Block in the editor view.
43 + * Register REST API routes.
45 44 *
46 - * @since 2.0.1
45 + * @since 3.1.8
47 46 */
48 - public function enqueue_scripts_editor() {
47 + public function register_routes() {
49 48
50 - wp_enqueue_script( 'convertkit-gutenberg-block-broadcasts', CONVERTKIT_PLUGIN_URL . 'resources/backend/js/gutenberg-block-broadcasts.js', array( 'convertkit-gutenberg' ), CONVERTKIT_PLUGIN_VERSION, true );
49 + register_rest_route(
50 + 'kit/v1',
51 + '/broadcasts',
52 + array(
53 + 'methods' => WP_REST_Server::READABLE,
54 + 'args' => array(
55 + 'date_format' => array(
56 + 'default' => $this->get_default_value( 'date_format' ),
57 + 'sanitize_callback' => 'sanitize_text_field',
58 + ),
59 + 'display_image' => array(
60 + 'default' => $this->get_default_value( 'display_image' ),
61 + 'sanitize_callback' => 'absint',
62 + ),
63 + 'display_description' => array(
64 + 'default' => $this->get_default_value( 'display_description' ),
65 + 'sanitize_callback' => 'absint',
66 + ),
67 + 'display_read_more' => array(
68 + 'default' => $this->get_default_value( 'display_read_more' ),
69 + 'sanitize_callback' => 'absint',
70 + ),
71 + 'read_more_label' => array(
72 + 'default' => $this->get_default_value( 'read_more_label' ),
73 + 'sanitize_callback' => 'sanitize_text_field',
74 + ),
75 + 'limit' => array(
76 + 'default' => $this->get_default_value( 'limit' ),
77 + 'sanitize_callback' => 'absint',
78 + ),
79 + 'page' => array(
80 + 'default' => $this->get_default_value( 'page' ),
81 + 'sanitize_callback' => 'absint',
82 + ),
83 + 'paginate' => array(
84 + 'default' => $this->get_default_value( 'paginate' ),
85 + 'sanitize_callback' => 'absint',
86 + ),
87 + 'paginate_label_next' => array(
88 + 'default' => $this->get_default_value( 'paginate_label_next' ),
89 + 'sanitize_callback' => 'sanitize_text_field',
90 + ),
91 + 'paginate_label_prev' => array(
92 + 'default' => $this->get_default_value( 'paginate_label_prev' ),
93 + 'sanitize_callback' => 'sanitize_text_field',
94 + ),
95 + 'link_color' => array(
96 + 'default' => $this->get_default_value( 'link_color' ),
97 + 'sanitize_callback' => 'sanitize_text_field',
98 + ),
99 + ),
100 + 'callback' => function ( $request ) {
101 + return rest_ensure_response( $this->render_ajax( $request ) );
102 + },
51 103
104 + // No authentication required, as this is on the frontend site.
105 + 'permission_callback' => '__return_true',
106 + )
107 + );
108 +
52 109 }
53 110
54 111 /**
55 112 * Enqueues scripts for this Gutenberg Block in the editor and frontend views.
@@ -60,23 +117,24 @@
60 117
61 118 // Get ConvertKit Settings.
62 119 $settings = new ConvertKit_Settings();
63 120
64 - wp_enqueue_script( 'convertkit-' . $this->get_name(), CONVERTKIT_PLUGIN_URL . 'resources/frontend/js/broadcasts.js', array( 'jquery' ), CONVERTKIT_PLUGIN_VERSION, true );
121 + // Enqueue frontend JS.
122 + convertkit_enqueue_frontend_js();
123 +
124 + // Define variables.
65 125 wp_localize_script(
66 - 'convertkit-' . $this->get_name(),
126 + 'convertkit-js',
67 127 'convertkit_broadcasts',
68 128 array(
69 - // WordPress AJAX URL endpoint.
70 - 'ajax_url' => admin_url( 'admin-ajax.php' ),
129 + // REST API URL endpoint.
130 + 'ajax_url' => rest_url( 'kit/v1/broadcasts' ),
71 131
72 - // AJAX action registered in __construct().
73 - 'action' => 'convertkit_broadcasts_render',
74 -
75 132 // Whether debugging is enabled.
76 133 'debug' => $settings->debug_enabled(),
77 134 )
78 135 );
136 +
79 137 }
80 138
81 139 /**
82 140 * Enqueues styles for this Gutenberg Block in the editor and frontend views.
@@ -84,9 +142,9 @@
84 142 * @since 1.9.7.4
85 143 */
86 144 public function enqueue_styles() {
87 145
88 - wp_enqueue_style( 'convertkit-' . $this->get_name(), CONVERTKIT_PLUGIN_URL . 'resources/frontend/css/broadcasts.css', array(), CONVERTKIT_PLUGIN_VERSION );
146 + convertkit_enqueue_frontend_css();
89 147
90 148 }
91 149
92 150 /**
@@ -98,8 +156,9 @@
98 156
99 157 /**
100 158 * This will register as:
101 159 * - a shortcode, with the name [convertkit_broadcasts].
160 + * - a shortcode, with the name [kit_broadcasts].
102 161 * - a Gutenberg block, with the name convertkit/broadcasts.
103 162 */
104 163 return 'broadcasts';
105 164
@@ -105,8 +164,43 @@
105 164
106 165 }
107 166
108 167 /**
168 + * Returns this block's title.
169 + *
170 + * @since 3.1.1
171 + */
172 + public function get_title() {
173 +
174 + return __( 'Kit Broadcasts', 'convertkit' );
175 +
176 + }
177 +
178 + /**
179 + * Returns this block's plural title.
180 + *
181 + * @since 3.4.0
182 + *
183 + * @return string
184 + */
185 + public function get_title_plural() {
186 +
187 + return __( 'Kit Broadcasts', 'convertkit' );
188 +
189 + }
190 +
191 + /**
192 + * Returns this block's icon.
193 + *
194 + * @since 3.1.1
195 + */
196 + public function get_icon() {
197 +
198 + return 'resources/backend/images/block-icon-broadcasts.svg';
199 +
200 + }
201 +
202 + /**
109 203 * Returns this block's Title, Icon, Categories, Keywords and properties.
110 204 *
111 205 * @since 1.9.7.4
112 206 */
@@ -112,48 +206,59 @@
112 206 */
113 207 public function get_overview() {
114 208
115 209 // Fetch Posts.
116 - $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
210 + $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
211 + $settings = new ConvertKit_Settings();
117 212
118 213 return array(
119 - 'title' => __( 'ConvertKit Broadcasts', 'convertkit' ),
120 - 'description' => __( 'Displays a list of your ConvertKit broadcasts.', 'convertkit' ),
121 - 'icon' => 'resources/backend/images/block-icon-broadcasts.png',
122 - 'category' => 'convertkit',
123 - 'keywords' => array(
214 + 'title' => $this->get_title(),
215 + 'description' => __( 'Displays a list of your Kit broadcasts.', 'convertkit' ),
216 + 'icon' => $this->get_icon(),
217 + 'category' => 'convertkit',
218 + 'keywords' => array(
124 219 __( 'ConvertKit', 'convertkit' ),
220 + __( 'Kit', 'convertkit' ),
125 221 __( 'Broadcasts', 'convertkit' ),
126 222 __( 'Posts', 'convertkit' ),
127 223 ),
128 224
129 225 // Function to call when rendering as a block or a shortcode on the frontend web site.
130 - 'render_callback' => array( $this, 'render' ),
226 + 'render_callback' => array( $this, 'render' ),
131 227
132 228 // Shortcode: TinyMCE / QuickTags Modal Width and Height.
133 - 'modal' => array(
229 + 'modal' => array(
134 230 'width' => 650,
135 - 'height' => 580,
231 + 'height' => 455,
136 232 ),
137 233
138 234 // Shortcode: Include a closing [/shortcode] tag when using TinyMCE or QuickTag Modals.
139 - 'shortcode_include_closing_tag' => false,
235 + 'shortcode_include_closing_tag' => false,
140 236
141 237 // Gutenberg: Block Icon in Editor.
142 - 'gutenberg_icon' => convertkit_get_file_contents( CONVERTKIT_PLUGIN_PATH . '/resources/backend/images/block-icon-broadcasts.svg' ),
238 + 'gutenberg_icon' => convertkit_get_file_contents( CONVERTKIT_PLUGIN_PATH . '/resources/backend/images/block-icon-broadcasts.svg' ),
143 239
144 240 // Gutenberg: Example image showing how this block looks when choosing it in Gutenberg.
145 - 'gutenberg_example_image' => CONVERTKIT_PLUGIN_URL . 'resources/backend/images/block-example-broadcasts.png',
241 + 'gutenberg_example_image' => CONVERTKIT_PLUGIN_URL . 'resources/backend/images/block-example-broadcasts.png',
146 242
147 - // Gutenberg: Help description, displayed when no Posts exist.
148 - 'gutenberg_help_description' => __( 'No Broadcasts exist in ConvertKit. Send your first Broadcast in ConvertKit to see the link to it here.', 'convertkit' ),
243 + // Help descriptions, displayed when no Access Token / resources exist and this block/shortcode is added.
244 + 'no_access_token' => array(
245 + 'notice' => __( 'Not connected to Kit.', 'convertkit' ),
246 + 'link' => convertkit_get_setup_wizard_plugin_link(),
247 + 'link_text' => __( 'Click here to connect your Kit account.', 'convertkit' ),
248 + 'instruction_text' => __( 'Connect your Kit account at Settings > Kit, and then refresh this page to configure broadcasts to display.', 'convertkit' ),
249 + ),
250 + 'no_resources' => array(
251 + 'notice' => __( 'No broadcasts exist in Kit.', 'convertkit' ),
252 + 'link' => convertkit_get_new_broadcast_url(),
253 + 'link_text' => __( 'Click here to send your first broadcast.', 'convertkit' ),
254 + 'instruction_text' => __( 'Add a broadcast to your Kit account, and then refresh this page to configure broadcasts to display.', 'convertkit' ),
255 + ),
149 256
150 - // Gutenberg: JS function to call when rendering the block preview in the Gutenberg editor.
151 - // If not defined, render_callback above will be used.
152 - 'gutenberg_preview_render_callback' => 'convertKitGutenbergBroadcastsBlockRenderPreview',
153 -
154 - // Flag to determine if Broadcasts exist.
155 - 'has_posts' => $posts->exist(),
257 + // Whether an API Key exists in the Plugin, and are the required resources (broadcasts) available.
258 + // If no API Key is specified in the Plugin's settings, render the "No API Key" output.
259 + 'has_access_token' => $settings->has_access_and_refresh_token(),
260 + 'has_resources' => $posts->exist(),
156 261 );
157 262
158 263 }
159 264
@@ -169,8 +274,12 @@
169 274 'display_grid' => array(
170 275 'type' => 'boolean',
171 276 'default' => $this->get_default_value( 'display_grid' ),
172 277 ),
278 + 'display_order' => array(
279 + 'type' => 'string',
280 + 'default' => $this->get_default_value( 'display_order' ),
281 + ),
173 282 'date_format' => array(
174 283 'type' => 'string',
175 284 'default' => $this->get_default_value( 'date_format' ),
176 285 ),
@@ -210,9 +319,9 @@
210 319 'type' => 'string',
211 320 'default' => $this->get_default_value( 'paginate_label_next' ),
212 321 ),
213 322
214 - // get_supports() color attribute.
323 + // get_supports() style, color and typography attributes.
215 324 'style' => array(
216 325 'type' => 'object',
217 326 ),
218 327 'backgroundColor' => array(
@@ -220,8 +329,11 @@
220 329 ),
221 330 'textColor' => array(
222 331 'type' => 'string',
223 332 ),
333 + 'fontSize' => array(
334 + 'type' => 'string',
335 + ),
224 336
225 337 // Always required for Gutenberg.
226 338 'is_gutenberg_example' => array(
227 339 'type' => 'boolean',
@@ -240,14 +352,22 @@
240 352 */
241 353 public function get_supports() {
242 354
243 355 return array(
244 - 'className' => true,
245 - 'color' => array(
356 + 'className' => true,
357 + 'color' => array(
246 358 'link' => true,
247 359 'background' => true,
248 360 'text' => true,
249 361 ),
362 + 'typography' => array(
363 + 'fontSize' => true,
364 + 'lineHeight' => true,
365 + ),
366 + 'spacing' => array(
367 + 'margin' => true,
368 + 'padding' => true,
369 + ),
250 370 );
251 371
252 372 }
253 373
@@ -259,13 +379,8 @@
259 379 * @return bool|array
260 380 */
261 381 public function get_fields() {
262 382
263 - // Bail if the request is not for the WordPress Administration or frontend editor.
264 - if ( ! WP_ConvertKit()->is_admin_or_frontend_editor() ) {
265 - return false;
266 - }
267 -
268 383 return array(
269 384 'display_grid' => array(
270 385 'label' => __( 'Display as grid', 'convertkit' ),
271 386 'type' => 'toggle',
@@ -270,8 +385,16 @@
270 385 'label' => __( 'Display as grid', 'convertkit' ),
271 386 'type' => 'toggle',
272 387 'description' => __( 'If enabled, displays broadcasts in a grid, instead of a list.', 'convertkit' ),
273 388 ),
389 + 'display_order' => array(
390 + 'label' => __( 'Display order', 'convertkit' ),
391 + 'type' => 'select',
392 + 'values' => array(
393 + 'date-broadcast' => __( 'Date, Broadcast', 'convertkit' ),
394 + 'broadcast-date' => __( 'Broadcast, Date', 'convertkit' ),
395 + ),
396 + ),
274 397 'date_format' => array(
275 398 'label' => __( 'Date format', 'convertkit' ),
276 399 'type' => 'select',
277 400 'values' => array(
@@ -296,8 +419,12 @@
296 419 'read_more_label' => array(
297 420 'label' => __( 'Read more label', 'convertkit' ),
298 421 'type' => 'text',
299 422 'description' => __( 'The label to display for the "read more" link below each broadcast.', 'convertkit' ),
423 + 'display_if' => array(
424 + 'key' => 'display_read_more',
425 + 'value' => 1,
426 + ),
300 427 ),
301 428 'limit' => array(
302 429 'label' => __( 'Number of posts', 'convertkit' ),
303 430 'type' => 'number',
@@ -313,13 +440,21 @@
313 440 'paginate_label_prev' => array(
314 441 'label' => __( 'Newer posts label', 'convertkit' ),
315 442 'type' => 'text',
316 443 'description' => __( 'The label to display for the link to newer broadcasts.', 'convertkit' ),
444 + 'display_if' => array(
445 + 'key' => 'paginate',
446 + 'value' => 1,
447 + ),
317 448 ),
318 449 'paginate_label_next' => array(
319 450 'label' => __( 'Older posts label', 'convertkit' ),
320 451 'type' => 'text',
321 452 'description' => __( 'The label to display for the link to older broadcasts.', 'convertkit' ),
453 + 'display_if' => array(
454 + 'key' => 'paginate',
455 + 'value' => 1,
456 + ),
322 457 ),
323 458
324 459 // These fields will only display on the shortcode, and are deliberately not registered in get_attributes(),
325 460 // because Gutenberg will register its own color pickers for link, background and text.
@@ -347,27 +482,33 @@
347 482 * @return bool|array
348 483 */
349 484 public function get_panels() {
350 485
351 - // Bail if the request is not for the WordPress Administration or frontend editor.
352 - if ( ! WP_ConvertKit()->is_admin_or_frontend_editor() ) {
353 - return false;
354 - }
355 -
356 486 return array(
357 - 'general' => array(
487 + 'general' => array(
358 488 'label' => __( 'General', 'convertkit' ),
359 489 'fields' => array(
360 490 'display_grid',
491 + 'display_order',
361 492 'date_format',
362 493 'display_image',
363 494 'display_description',
364 495 'display_read_more',
365 496 'read_more_label',
497 + ),
498 + ),
499 + 'pagination' => array(
500 + 'label' => __( 'Pagination', 'convertkit' ),
501 + 'fields' => array(
366 502 'limit',
367 503 'paginate',
368 504 'paginate_label_prev',
369 505 'paginate_label_next',
506 + ),
507 + ),
508 + 'styles' => array(
509 + 'label' => __( 'Styles', 'convertkit' ),
510 + 'fields' => array(
370 511 'link_color',
371 512 'background_color',
372 513 'text_color',
373 514 ),
@@ -386,8 +527,9 @@
386 527 public function get_default_values() {
387 528
388 529 return array(
389 530 'display_grid' => false,
531 + 'display_order' => 'date-broadcast',
390 532 'date_format' => 'F j, Y',
391 533 'display_image' => false,
392 534 'display_description' => false,
393 535 'display_read_more' => false,
@@ -415,10 +557,10 @@
415 557 * Returns the block's output, based on the supplied configuration attributes.
416 558 *
417 559 * @since 1.9.7.4
418 560 *
419 - * @param array $atts Block / Shortcode Attributes.
420 - * @return string Output
561 + * @param array $atts Block / Shortcode / Page Builder Module Attributes.
562 + * @return string
421 563 */
422 564 public function render( $atts ) {
423 565
424 566 // Parse attributes, defining fallback defaults if required
@@ -430,19 +572,12 @@
430 572
431 573 // Fetch Posts.
432 574 $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
433 575
434 - // If this is an admin request, refresh the Posts resource now from the API,
435 - // as it's an inexpensive query of ~ 0.5 seconds when we're editing a Page
436 - // containing this block.
437 - if ( function_exists( 'is_admin' ) && is_admin() ) {
438 - $posts->refresh();
439 - }
440 -
441 576 // If no Posts exist, bail.
442 577 if ( ! $posts->exist() ) {
443 578 if ( $settings->debug_enabled() ) {
444 - return '<!-- ' . __( 'No Broadcasts exist in ConvertKit.', 'convertkit' ) . ' -->';
579 + return '<!-- ' . __( 'No Broadcasts exist in Kit.', 'convertkit' ) . ' -->';
445 580 }
446 581
447 582 return '';
448 583 }
@@ -447,9 +582,29 @@
447 582 return '';
448 583 }
449 584
450 585 // Build HTML.
451 - $html = $this->build_html( $posts, $atts );
586 + if ( $this->is_block_editor_request() ) {
587 + // For the block editor, don't include compiled CSS classes and styles,
588 + // as the block editor will add these to the parent container.
589 + // Otherwise the block will render incorrectly with double padding, double margins etc.
590 + $html = $this->build_html(
591 + $posts,
592 + $atts,
593 + true,
594 + array(
595 + 'convertkit-' . $this->get_name(),
596 + )
597 + );
598 + } else {
599 + $html = $this->build_html(
600 + $posts,
601 + $atts,
602 + true,
603 + $this->get_css_classes(),
604 + $this->get_css_styles( $atts )
605 + );
606 + }
452 607
453 608 /**
454 609 * Filter the block's content immediately before it is output.
455 610 *
@@ -454,10 +609,10 @@
454 609 * Filter the block's content immediately before it is output.
455 610 *
456 611 * @since 1.9.7.4
457 612 *
458 - * @param string $html ConvertKit Broadcasts HTML.
459 - * @param array $atts Block Attributes.
613 + * @param string $html ConvertKit Broadcasts HTML.
614 + * @param array $atts Block Attributes.
460 615 */
461 616 $html = apply_filters( 'convertkit_block_broadcasts_render', $html, $atts );
462 617
463 618 return $html;
@@ -468,27 +623,27 @@
468 623 * Returns the block's output, based on the supplied configuration attributes,
469 624 * when requested via AJAX.
470 625 *
471 626 * @since 1.9.7.6
627 + *
628 + * @param WP_REST_Request $request The REST request.
629 + * @return string
472 630 */
473 - public function render_ajax() {
631 + public function render_ajax( $request ) {
474 632
475 - // Check nonce.
476 - check_ajax_referer( 'convertkit-broadcasts', 'nonce' );
477 -
478 633 // Build attributes array.
479 634 $atts = array(
480 - 'date_format' => stripslashes( sanitize_text_field( $_REQUEST['date_format'] ) ),
481 - 'display_image' => absint( $_REQUEST['display_image'] ),
482 - 'display_description' => absint( $_REQUEST['display_description'] ),
483 - 'display_read_more' => absint( $_REQUEST['display_read_more'] ),
484 - 'read_more_label' => stripslashes( sanitize_text_field( $_REQUEST['read_more_label'] ) ),
485 - 'limit' => absint( $_REQUEST['limit'] ),
486 - 'page' => absint( $_REQUEST['page'] ),
487 - 'paginate' => absint( $_REQUEST['paginate'] ),
488 - 'paginate_label_next' => stripslashes( sanitize_text_field( $_REQUEST['paginate_label_next'] ) ),
489 - 'paginate_label_prev' => stripslashes( sanitize_text_field( $_REQUEST['paginate_label_prev'] ) ),
490 - 'link_color' => stripslashes( sanitize_text_field( $_REQUEST['link_color'] ) ),
635 + 'date_format' => $request->get_param( 'date_format' ),
636 + 'display_image' => $request->get_param( 'display_image' ),
637 + 'display_description' => $request->get_param( 'display_description' ),
638 + 'display_read_more' => $request->get_param( 'display_read_more' ),
639 + 'read_more_label' => $request->get_param( 'read_more_label' ),
640 + 'limit' => $request->get_param( 'limit' ),
641 + 'page' => $request->get_param( 'page' ),
642 + 'paginate' => $request->get_param( 'paginate' ),
643 + 'paginate_label_next' => $request->get_param( 'paginate_label_next' ),
644 + 'paginate_label_prev' => $request->get_param( 'paginate_label_prev' ),
645 + 'link_color' => $request->get_param( 'link_color' ),
491 646 );
492 647
493 648 // Parse attributes, defining fallback defaults if required
494 649 // and moving some attributes (such as Gutenberg's styles), if defined.
@@ -493,11 +648,23 @@
493 648 // Parse attributes, defining fallback defaults if required
494 649 // and moving some attributes (such as Gutenberg's styles), if defined.
495 650 $atts = $this->sanitize_and_declare_atts( $atts );
496 651
652 + // Setup Settings class.
653 + $settings = new ConvertKit_Settings();
654 +
497 655 // Fetch Posts.
498 656 $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
499 657
658 + // If no Posts exist, bail.
659 + if ( ! $posts->exist() ) {
660 + if ( $settings->debug_enabled() ) {
661 + return '<!-- ' . __( 'No Broadcasts exist in Kit.', 'convertkit' ) . ' -->';
662 + }
663 +
664 + return '';
665 + }
666 +
500 667 // Build HTML.
501 668 $html = $this->build_html( $posts, $atts, false );
502 669
503 670 /**
@@ -510,10 +677,9 @@
510 677 * @param array $atts Block Attributes.
511 678 */
512 679 $html = apply_filters( 'convertkit_block_broadcasts_render_ajax', $html, $atts );
513 680
514 - // Send HTML as response.
515 - wp_send_json_success( $html );
681 + return $html;
516 682
517 683 }
518 684
519 685 /**
@@ -524,11 +690,13 @@
524 690 *
525 691 * @param ConvertKit_Resource_Posts $posts ConvertKit Posts Resource class.
526 692 * @param array $atts Block attributes.
527 693 * @param bool $include_container Include container div in HTML.
528 - * @return string HTML
694 + * @param array $css_classes CSS classes to apply to block.
695 + * @param array $css_styles CSS inline styles to apply to block.
696 + * @return string
529 697 */
530 - private function build_html( $posts, $atts, $include_container = true ) {
698 + private function build_html( $posts, $atts, $include_container = true, $css_classes = array(), $css_styles = array() ) {
531 699
532 700 // Get paginated subset of Posts.
533 701 $broadcasts = $posts->get_paginated_subset( $atts['page'], $atts['limit'] );
534 702
@@ -539,9 +707,9 @@
539 707 $html = '';
540 708
541 709 // Include container, if required.
542 710 if ( $include_container ) {
543 - $html .= '<div class="' . implode( ' ', map_deep( $atts['_css_classes'], 'sanitize_html_class' ) ) . '" style="' . implode( ';', map_deep( $atts['_css_styles'], 'esc_attr' ) ) . '" ' . $this->get_atts_as_html_data_attributes( $atts ) . '>';
711 + $html .= '<div class="' . implode( ' ', map_deep( $css_classes, 'sanitize_html_class' ) ) . '" style="' . implode( ';', map_deep( $css_styles, 'esc_attr' ) ) . '" ' . $this->get_atts_as_html_data_attributes( $atts ) . '>';
544 712 }
545 713
546 714 // Start list.
547 715 $html .= '<ul class="convertkit-broadcasts-list">';