PluginProbe
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages / 3.4.6
Kit (formerly ConvertKit) – Email Newsletter, Email Marketing, Membership, Subscribers and Landing Pages v3.4.6
3.4.6 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 All 199 releases
← All changes | admin/class-convertkit-admin-post.php +142 -14 2.2.5 → 3.4.6 View file →
@@ -7,10 +7,10 @@
7 7 */
8 8
9 9 /**
10 10 * Registers a metabox on Posts, Pages and public facing Custom Post Types
11 - * and saves its settings when the Post is saved in the WordPress Administration
12 - * interface.
11 + * that do not use the block editor, saving settings when the Post is saved
12 + * in the WordPress Administration interface.
13 13 *
14 14 * @package ConvertKit
15 15 * @author ConvertKit
16 16 */
@@ -22,14 +22,84 @@
22 22 * @since 1.9.6
23 23 */
24 24 public function __construct() {
25 25
26 - add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
26 + // Register "Add New" Kit button on Pages.
27 + add_filter( 'views_edit-page', array( $this, 'output_wp_list_table_buttons' ) );
28 +
29 + add_action( 'post_submitbox_misc_actions', array( $this, 'output_pre_publish_actions' ) );
30 + add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 10, 2 );
27 31 add_action( 'save_post', array( $this, 'save_post_meta' ) );
28 32
29 33 }
30 34
31 35 /**
36 + * Registers 'Add New' buttons for the given Post Type's admin screen.
37 + *
38 + * If no options are registered, no button is displayed.
39 + *
40 + * JS will move this button to be displayed next to the "Add New" button when viewing the table of Pages or Posts,
41 + * as there is not a native WordPress action/filter for registering buttons next to the "Add New" button.
42 + *
43 + * @since 2.5.5
44 + *
45 + * @param array $views Views.
46 + * @return array Views
47 + */
48 + public function output_wp_list_table_buttons( $views ) {
49 +
50 + // Get current post type that we're viewing.
51 + $post_type = $this->get_current_post_type();
52 +
53 + // Don't output any buttons if we couldn't determine the current post type.
54 + if ( ! $post_type ) {
55 + return $views;
56 + }
57 +
58 + // Define a blank array of buttons to be filtered.
59 + $buttons = array();
60 +
61 + /**
62 + * Registers 'Add New' buttons for the given Post Type's admin screen.
63 + *
64 + * @since 2.5.5
65 + *
66 + * @param array $buttons Buttons.
67 + * @param string $post_type Post Type.
68 + */
69 + $buttons = apply_filters( 'convertkit_admin_post_register_add_new_buttons', $buttons, $post_type );
70 +
71 + // Bail if no buttons are registered for display.
72 + if ( ! count( $buttons ) ) {
73 + return $views;
74 + }
75 +
76 + // Enqueue JS and CSS.
77 + wp_enqueue_script( 'convertkit-admin-wp-list-table-buttons', CONVERTKIT_PLUGIN_URL . 'resources/backend/js/wp-list-table-buttons.js', array( 'jquery' ), CONVERTKIT_PLUGIN_VERSION, true );
78 + wp_enqueue_style( 'convertkit-admin-wp-list-table-buttons', CONVERTKIT_PLUGIN_URL . 'resources/backend/css/wp-list-table-buttons.css', array(), CONVERTKIT_PLUGIN_VERSION );
79 +
80 + // Build buttons HTML.
81 + $html = '';
82 + foreach ( $buttons as $button_name => $button ) {
83 + $html .= sprintf(
84 + '<a href="%s">%s</a>',
85 + esc_attr( $button['url'] ),
86 + esc_html( $button['label'] )
87 + );
88 + }
89 +
90 + // Register an 'Add New' dropdown button, with buttons HTML.
91 + $views['convertkit'] = sprintf(
92 + '<span class="convertkit-action page-title-action hidden">%s<span class="convertkit-actions hidden">%s</span></span>',
93 + __( 'Add New', 'convertkit' ),
94 + $html
95 + );
96 +
97 + return $views;
98 +
99 + }
100 +
101 + /**
32 102 * Enqueue JavaScript when editing a Page, Post or Custom Post Type that outputs
33 103 * ConvertKit Plugin settings.
34 104 *
35 105 * @since 1.9.6.4
@@ -62,10 +132,13 @@
62 132
63 133 // Enqueue Post CSS.
64 134 wp_enqueue_style( 'convertkit-post', CONVERTKIT_PLUGIN_URL . 'resources/backend/css/post.css', array(), CONVERTKIT_PLUGIN_VERSION );
65 135
136 + // Enqueue Refresh Resources CSS.
137 + wp_enqueue_style( 'convertkit-admin-refresh-resources', CONVERTKIT_PLUGIN_URL . 'resources/backend/css/refresh-resources.css', array(), CONVERTKIT_PLUGIN_VERSION );
138 +
66 139 /**
67 - * Enqueue CSS for the Settings Screen at Settings > ConvertKit
140 + * Enqueue CSS for the Settings Screen at Settings > Kit
68 141 *
69 142 * @since 1.9.6.4
70 143 */
71 144 do_action( 'convertkit_admin_post_enqueue_styles' );
@@ -72,15 +145,47 @@
72 145
73 146 }
74 147
75 148 /**
149 + * Registers actions in the pre-publish actions section of the Publish metabox
150 + * in the Classic Editor.
151 + *
152 + * @since 2.4.0
153 + *
154 + * @param WP_Post $post WordPress Post.
155 + */
156 + public function output_pre_publish_actions( $post ) {
157 +
158 + // Bail if no actions registered.
159 + $pre_publish_actions = convertkit_get_pre_publish_actions();
160 + if ( ! count( $pre_publish_actions ) ) {
161 + return;
162 + }
163 +
164 + // Bail if Post is not a supported Post Type.
165 + if ( get_post_type( $post ) !== 'post' ) {
166 + return;
167 + }
168 +
169 + // Bail if Post is not a draft.
170 + if ( ! in_array( $post->post_status, array( 'draft', 'auto-draft' ), true ) ) {
171 + return;
172 + }
173 +
174 + // Load pre-publish actions view.
175 + include CONVERTKIT_PLUGIN_PATH . '/views/backend/post/pre-publish-actions.php';
176 +
177 + }
178 +
179 + /**
76 180 * Adds a meta box for the given Post Type.
77 181 *
78 182 * @since 1.9.6
79 183 *
80 - * @param string $post_type Post Type.
184 + * @param string $post_type Post Type.
185 + * @param WP_Post $post Post.
81 186 */
82 - public function add_meta_boxes( $post_type ) {
187 + public function add_meta_boxes( $post_type, $post ) {
83 188
84 189 // Don't register the meta box if this Post Type isn't supported.
85 190 $supported_post_types = convertkit_get_supported_post_types();
86 191 if ( ! in_array( $post_type, $supported_post_types, true ) ) {
@@ -86,10 +191,15 @@
86 191 if ( ! in_array( $post_type, $supported_post_types, true ) ) {
87 192 return;
88 193 }
89 194
195 + // Don't register the meta box if the block editor is being used, as register_post_meta() handles saving post meta.
196 + if ( function_exists( 'use_block_editor_for_post' ) && use_block_editor_for_post( $post ) ) {
197 + return;
198 + }
199 +
90 200 // Register Meta Box.
91 - add_meta_box( 'wp-convertkit-meta-box', __( 'ConvertKit', 'convertkit' ), array( $this, 'display_meta_box' ), $post_type, 'normal' );
201 + add_meta_box( 'wp-convertkit-meta-box', __( 'Kit', 'convertkit' ), array( $this, 'display_meta_box' ), $post_type, 'normal' );
92 202
93 203 // Enqueue JS and CSS.
94 204 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
95 205 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_styles' ) );
@@ -111,10 +221,9 @@
111 221 }
112 222
113 223 // Show a warning if the API credentials haven't been set.
114 224 $settings = new ConvertKit_Settings();
115 - if ( ! $settings->has_api_key_and_secret() ) {
116 - $post_type = get_post_type_object( $post->post_type );
225 + if ( ! $settings->has_access_and_refresh_token() ) {
117 226 include CONVERTKIT_PLUGIN_PATH . '/views/backend/post/no-api-key.php';
118 227 return;
119 228 }
120 229
@@ -121,10 +230,11 @@
121 230 // Initialize Restrict Content Settings class.
122 231 $restrict_content_settings = new ConvertKit_Settings_Restrict_Content();
123 232
124 233 // Fetch Post Settings, Forms, Landing Pages and Tags.
125 - $convertkit_post = new ConvertKit_Post( $post->ID );
126 - $convertkit_forms = new ConvertKit_Resource_Forms();
234 + $convertkit_post = new ConvertKit_Post( $post->ID );
235 + $convertkit_forms = new ConvertKit_Resource_Forms();
236 +
127 237 $convertkit_landing_pages = new ConvertKit_Resource_Landing_Pages();
128 238 $convertkit_products = new ConvertKit_Resource_Products();
129 239 $convertkit_tags = new ConvertKit_Resource_Tags();
130 240
@@ -169,10 +279,15 @@
169 279 if ( ! isset( $_POST['wp-convertkit'] ) ) {
170 280 return;
171 281 }
172 282
283 + // Bail if the current user cannot edit this Post.
284 + if ( ! current_user_can( 'edit_post', $post_id ) ) {
285 + return;
286 + }
287 +
173 288 // Save Post's settings.
174 - $this->save_post_settings( $post_id, $_POST['wp-convertkit'] );
289 + $this->save_post_settings( $post_id, wp_unslash( $_POST['wp-convertkit'] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
175 290
176 291 }
177 292
178 293 /**
@@ -200,13 +315,13 @@
200 315 continue;
201 316 }
202 317
203 318 // Sanitize value.
204 - $new_value = sanitize_text_field( wp_unslash( $settings[ $key ] ) );
319 + $new_value = sanitize_text_field( $settings[ $key ] );
205 320
206 321 // Skip if the setting value is -2, as this means it's a Bulk Edit request and this setting
207 322 // is set as 'No Change'.
208 - if ( $new_value == '-2' ) { // phpcs:ignore WordPress.PHP.StrictComparisons
323 + if ( $new_value == '-2' ) { // phpcs:ignore Universal.Operators.StrictComparisons.LooseEqual
209 324 continue;
210 325 }
211 326
212 327 // Update setting using posted value.
@@ -222,8 +337,21 @@
222 337 // it is never displayed again.
223 338 if ( $meta['form'] || $meta['landing_page'] ) {
224 339 WP_ConvertKit()->get_class( 'review_request' )->request_review();
225 340 }
341 +
342 + }
343 +
344 + /**
345 + * Get the current post type based on the screen that is viewed.
346 + *
347 + * @since 2.5.5
348 + *
349 + * @return bool|string
350 + */
351 + private function get_current_post_type() {
352 +
353 + return convertkit_get_current_screen( 'post_type' );
226 354
227 355 }
228 356
229 357 }