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/blocks/class-convertkit-block-broadcasts.php +251 -84 2.2.33.4.3 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 /**
@@ -105,8 +163,43 @@
105 163
106 164 }
107 165
108 166 /**
167 + * Returns this block's title.
168 + *
169 + * @since 3.1.1
170 + */
171 + public function get_title() {
172 +
173 + return __( 'Kit Broadcasts', 'convertkit' );
174 +
175 + }
176 +
177 + /**
178 + * Returns this block's plural title.
179 + *
180 + * @since 3.4.0
181 + *
182 + * @return string
183 + */
184 + public function get_title_plural() {
185 +
186 + return __( 'Kit Broadcasts', 'convertkit' );
187 +
188 + }
189 +
190 + /**
191 + * Returns this block's icon.
192 + *
193 + * @since 3.1.1
194 + */
195 + public function get_icon() {
196 +
197 + return 'resources/backend/images/block-icon-broadcasts.svg';
198 +
199 + }
200 +
201 + /**
109 202 * Returns this block's Title, Icon, Categories, Keywords and properties.
110 203 *
111 204 * @since 1.9.7.4
112 205 */
@@ -112,48 +205,59 @@
112 205 */
113 206 public function get_overview() {
114 207
115 208 // Fetch Posts.
116 - $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
209 + $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
210 + $settings = new ConvertKit_Settings();
117 211
118 212 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(
213 + 'title' => $this->get_title(),
214 + 'description' => __( 'Displays a list of your Kit broadcasts.', 'convertkit' ),
215 + 'icon' => $this->get_icon(),
216 + 'category' => 'convertkit',
217 + 'keywords' => array(
124 218 __( 'ConvertKit', 'convertkit' ),
219 + __( 'Kit', 'convertkit' ),
125 220 __( 'Broadcasts', 'convertkit' ),
126 221 __( 'Posts', 'convertkit' ),
127 222 ),
128 223
129 224 // Function to call when rendering as a block or a shortcode on the frontend web site.
130 - 'render_callback' => array( $this, 'render' ),
225 + 'render_callback' => array( $this, 'render' ),
131 226
132 227 // Shortcode: TinyMCE / QuickTags Modal Width and Height.
133 - 'modal' => array(
228 + 'modal' => array(
134 229 'width' => 650,
135 - 'height' => 580,
230 + 'height' => 455,
136 231 ),
137 232
138 233 // Shortcode: Include a closing [/shortcode] tag when using TinyMCE or QuickTag Modals.
139 - 'shortcode_include_closing_tag' => false,
234 + 'shortcode_include_closing_tag' => false,
140 235
141 236 // Gutenberg: Block Icon in Editor.
142 - 'gutenberg_icon' => convertkit_get_file_contents( CONVERTKIT_PLUGIN_PATH . '/resources/backend/images/block-icon-broadcasts.svg' ),
237 + 'gutenberg_icon' => convertkit_get_file_contents( CONVERTKIT_PLUGIN_PATH . '/resources/backend/images/block-icon-broadcasts.svg' ),
143 238
144 239 // 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',
240 + 'gutenberg_example_image' => CONVERTKIT_PLUGIN_URL . 'resources/backend/images/block-example-broadcasts.png',
146 241
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' ),
242 + // Help descriptions, displayed when no Access Token / resources exist and this block/shortcode is added.
243 + 'no_access_token' => array(
244 + 'notice' => __( 'Not connected to Kit.', 'convertkit' ),
245 + 'link' => convertkit_get_setup_wizard_plugin_link(),
246 + 'link_text' => __( 'Click here to connect your Kit account.', 'convertkit' ),
247 + 'instruction_text' => __( 'Connect your Kit account at Settings > Kit, and then refresh this page to configure broadcasts to display.', 'convertkit' ),
248 + ),
249 + 'no_resources' => array(
250 + 'notice' => __( 'No broadcasts exist in Kit.', 'convertkit' ),
251 + 'link' => convertkit_get_new_broadcast_url(),
252 + 'link_text' => __( 'Click here to send your first broadcast.', 'convertkit' ),
253 + 'instruction_text' => __( 'Add a broadcast to your Kit account, and then refresh this page to configure broadcasts to display.', 'convertkit' ),
254 + ),
149 255
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(),
256 + // Whether an API Key exists in the Plugin, and are the required resources (broadcasts) available.
257 + // If no API Key is specified in the Plugin's settings, render the "No API Key" output.
258 + 'has_access_token' => $settings->has_access_and_refresh_token(),
259 + 'has_resources' => $posts->exist(),
156 260 );
157 261
158 262 }
159 263
@@ -169,8 +273,12 @@
169 273 'display_grid' => array(
170 274 'type' => 'boolean',
171 275 'default' => $this->get_default_value( 'display_grid' ),
172 276 ),
277 + 'display_order' => array(
278 + 'type' => 'string',
279 + 'default' => $this->get_default_value( 'display_order' ),
280 + ),
173 281 'date_format' => array(
174 282 'type' => 'string',
175 283 'default' => $this->get_default_value( 'date_format' ),
176 284 ),
@@ -210,9 +318,9 @@
210 318 'type' => 'string',
211 319 'default' => $this->get_default_value( 'paginate_label_next' ),
212 320 ),
213 321
214 - // get_supports() color attribute.
322 + // get_supports() style, color and typography attributes.
215 323 'style' => array(
216 324 'type' => 'object',
217 325 ),
218 326 'backgroundColor' => array(
@@ -220,8 +328,11 @@
220 328 ),
221 329 'textColor' => array(
222 330 'type' => 'string',
223 331 ),
332 + 'fontSize' => array(
333 + 'type' => 'string',
334 + ),
224 335
225 336 // Always required for Gutenberg.
226 337 'is_gutenberg_example' => array(
227 338 'type' => 'boolean',
@@ -240,14 +351,22 @@
240 351 */
241 352 public function get_supports() {
242 353
243 354 return array(
244 - 'className' => true,
245 - 'color' => array(
355 + 'className' => true,
356 + 'color' => array(
246 357 'link' => true,
247 358 'background' => true,
248 359 'text' => true,
249 360 ),
361 + 'typography' => array(
362 + 'fontSize' => true,
363 + 'lineHeight' => true,
364 + ),
365 + 'spacing' => array(
366 + 'margin' => true,
367 + 'padding' => true,
368 + ),
250 369 );
251 370
252 371 }
253 372
@@ -259,13 +378,8 @@
259 378 * @return bool|array
260 379 */
261 380 public function get_fields() {
262 381
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 382 return array(
269 383 'display_grid' => array(
270 384 'label' => __( 'Display as grid', 'convertkit' ),
271 385 'type' => 'toggle',
@@ -270,8 +384,16 @@
270 384 'label' => __( 'Display as grid', 'convertkit' ),
271 385 'type' => 'toggle',
272 386 'description' => __( 'If enabled, displays broadcasts in a grid, instead of a list.', 'convertkit' ),
273 387 ),
388 + 'display_order' => array(
389 + 'label' => __( 'Display order', 'convertkit' ),
390 + 'type' => 'select',
391 + 'values' => array(
392 + 'date-broadcast' => __( 'Date, Broadcast', 'convertkit' ),
393 + 'broadcast-date' => __( 'Broadcast, Date', 'convertkit' ),
394 + ),
395 + ),
274 396 'date_format' => array(
275 397 'label' => __( 'Date format', 'convertkit' ),
276 398 'type' => 'select',
277 399 'values' => array(
@@ -296,8 +418,12 @@
296 418 'read_more_label' => array(
297 419 'label' => __( 'Read more label', 'convertkit' ),
298 420 'type' => 'text',
299 421 'description' => __( 'The label to display for the "read more" link below each broadcast.', 'convertkit' ),
422 + 'display_if' => array(
423 + 'key' => 'display_read_more',
424 + 'value' => 1,
425 + ),
300 426 ),
301 427 'limit' => array(
302 428 'label' => __( 'Number of posts', 'convertkit' ),
303 429 'type' => 'number',
@@ -313,13 +439,21 @@
313 439 'paginate_label_prev' => array(
314 440 'label' => __( 'Newer posts label', 'convertkit' ),
315 441 'type' => 'text',
316 442 'description' => __( 'The label to display for the link to newer broadcasts.', 'convertkit' ),
443 + 'display_if' => array(
444 + 'key' => 'paginate',
445 + 'value' => 1,
446 + ),
317 447 ),
318 448 'paginate_label_next' => array(
319 449 'label' => __( 'Older posts label', 'convertkit' ),
320 450 'type' => 'text',
321 451 'description' => __( 'The label to display for the link to older broadcasts.', 'convertkit' ),
452 + 'display_if' => array(
453 + 'key' => 'paginate',
454 + 'value' => 1,
455 + ),
322 456 ),
323 457
324 458 // These fields will only display on the shortcode, and are deliberately not registered in get_attributes(),
325 459 // because Gutenberg will register its own color pickers for link, background and text.
@@ -347,27 +481,33 @@
347 481 * @return bool|array
348 482 */
349 483 public function get_panels() {
350 484
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 485 return array(
357 - 'general' => array(
486 + 'general' => array(
358 487 'label' => __( 'General', 'convertkit' ),
359 488 'fields' => array(
360 489 'display_grid',
490 + 'display_order',
361 491 'date_format',
362 492 'display_image',
363 493 'display_description',
364 494 'display_read_more',
365 495 'read_more_label',
496 + ),
497 + ),
498 + 'pagination' => array(
499 + 'label' => __( 'Pagination', 'convertkit' ),
500 + 'fields' => array(
366 501 'limit',
367 502 'paginate',
368 503 'paginate_label_prev',
369 504 'paginate_label_next',
505 + ),
506 + ),
507 + 'styles' => array(
508 + 'label' => __( 'Styles', 'convertkit' ),
509 + 'fields' => array(
370 510 'link_color',
371 511 'background_color',
372 512 'text_color',
373 513 ),
@@ -386,8 +526,9 @@
386 526 public function get_default_values() {
387 527
388 528 return array(
389 529 'display_grid' => false,
530 + 'display_order' => 'date-broadcast',
390 531 'date_format' => 'F j, Y',
391 532 'display_image' => false,
392 533 'display_description' => false,
393 534 'display_read_more' => false,
@@ -415,10 +556,10 @@
415 556 * Returns the block's output, based on the supplied configuration attributes.
416 557 *
417 558 * @since 1.9.7.4
418 559 *
419 - * @param array $atts Block / Shortcode Attributes.
420 - * @return string Output
560 + * @param array $atts Block / Shortcode / Page Builder Module Attributes.
561 + * @return string
421 562 */
422 563 public function render( $atts ) {
423 564
424 565 // Parse attributes, defining fallback defaults if required
@@ -430,19 +571,12 @@
430 571
431 572 // Fetch Posts.
432 573 $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
433 574
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 575 // If no Posts exist, bail.
442 576 if ( ! $posts->exist() ) {
443 577 if ( $settings->debug_enabled() ) {
444 - return '<!-- ' . __( 'No Broadcasts exist in ConvertKit.', 'convertkit' ) . ' -->';
578 + return '<!-- ' . __( 'No Broadcasts exist in Kit.', 'convertkit' ) . ' -->';
445 579 }
446 580
447 581 return '';
448 582 }
@@ -447,9 +581,29 @@
447 581 return '';
448 582 }
449 583
450 584 // Build HTML.
451 - $html = $this->build_html( $posts, $atts );
585 + if ( $this->is_block_editor_request() ) {
586 + // For the block editor, don't include compiled CSS classes and styles,
587 + // as the block editor will add these to the parent container.
588 + // Otherwise the block will render incorrectly with double padding, double margins etc.
589 + $html = $this->build_html(
590 + $posts,
591 + $atts,
592 + true,
593 + array(
594 + 'convertkit-' . $this->get_name(),
595 + )
596 + );
597 + } else {
598 + $html = $this->build_html(
599 + $posts,
600 + $atts,
601 + true,
602 + $this->get_css_classes(),
603 + $this->get_css_styles( $atts )
604 + );
605 + }
452 606
453 607 /**
454 608 * Filter the block's content immediately before it is output.
455 609 *
@@ -454,10 +608,10 @@
454 608 * Filter the block's content immediately before it is output.
455 609 *
456 610 * @since 1.9.7.4
457 611 *
458 - * @param string $html ConvertKit Broadcasts HTML.
459 - * @param array $atts Block Attributes.
612 + * @param string $html ConvertKit Broadcasts HTML.
613 + * @param array $atts Block Attributes.
460 614 */
461 615 $html = apply_filters( 'convertkit_block_broadcasts_render', $html, $atts );
462 616
463 617 return $html;
@@ -468,27 +622,27 @@
468 622 * Returns the block's output, based on the supplied configuration attributes,
469 623 * when requested via AJAX.
470 624 *
471 625 * @since 1.9.7.6
626 + *
627 + * @param WP_REST_Request $request The REST request.
628 + * @return string
472 629 */
473 - public function render_ajax() {
630 + public function render_ajax( $request ) {
474 631
475 - // Check nonce.
476 - check_ajax_referer( 'convertkit-broadcasts', 'nonce' );
477 -
478 632 // Build attributes array.
479 633 $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'] ) ),
634 + 'date_format' => $request->get_param( 'date_format' ),
635 + 'display_image' => $request->get_param( 'display_image' ),
636 + 'display_description' => $request->get_param( 'display_description' ),
637 + 'display_read_more' => $request->get_param( 'display_read_more' ),
638 + 'read_more_label' => $request->get_param( 'read_more_label' ),
639 + 'limit' => $request->get_param( 'limit' ),
640 + 'page' => $request->get_param( 'page' ),
641 + 'paginate' => $request->get_param( 'paginate' ),
642 + 'paginate_label_next' => $request->get_param( 'paginate_label_next' ),
643 + 'paginate_label_prev' => $request->get_param( 'paginate_label_prev' ),
644 + 'link_color' => $request->get_param( 'link_color' ),
491 645 );
492 646
493 647 // Parse attributes, defining fallback defaults if required
494 648 // and moving some attributes (such as Gutenberg's styles), if defined.
@@ -493,11 +647,23 @@
493 647 // Parse attributes, defining fallback defaults if required
494 648 // and moving some attributes (such as Gutenberg's styles), if defined.
495 649 $atts = $this->sanitize_and_declare_atts( $atts );
496 650
651 + // Setup Settings class.
652 + $settings = new ConvertKit_Settings();
653 +
497 654 // Fetch Posts.
498 655 $posts = new ConvertKit_Resource_Posts( 'output_broadcasts' );
499 656
657 + // If no Posts exist, bail.
658 + if ( ! $posts->exist() ) {
659 + if ( $settings->debug_enabled() ) {
660 + return '<!-- ' . __( 'No Broadcasts exist in Kit.', 'convertkit' ) . ' -->';
661 + }
662 +
663 + return '';
664 + }
665 +
500 666 // Build HTML.
501 667 $html = $this->build_html( $posts, $atts, false );
502 668
503 669 /**
@@ -510,10 +676,9 @@
510 676 * @param array $atts Block Attributes.
511 677 */
512 678 $html = apply_filters( 'convertkit_block_broadcasts_render_ajax', $html, $atts );
513 679
514 - // Send HTML as response.
515 - wp_send_json_success( $html );
680 + return $html;
516 681
517 682 }
518 683
519 684 /**
@@ -524,11 +689,13 @@
524 689 *
525 690 * @param ConvertKit_Resource_Posts $posts ConvertKit Posts Resource class.
526 691 * @param array $atts Block attributes.
527 692 * @param bool $include_container Include container div in HTML.
528 - * @return string HTML
693 + * @param array $css_classes CSS classes to apply to block.
694 + * @param array $css_styles CSS inline styles to apply to block.
695 + * @return string
529 696 */
530 - private function build_html( $posts, $atts, $include_container = true ) {
697 + private function build_html( $posts, $atts, $include_container = true, $css_classes = array(), $css_styles = array() ) {
531 698
532 699 // Get paginated subset of Posts.
533 700 $broadcasts = $posts->get_paginated_subset( $atts['page'], $atts['limit'] );
534 701
@@ -539,9 +706,9 @@
539 706 $html = '';
540 707
541 708 // Include container, if required.
542 709 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 ) . '>';
710 + $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 711 }
545 712
546 713 // Start list.
547 714 $html .= '<ul class="convertkit-broadcasts-list">';