enabled_video_features = ultimate_post_kit_option('video_link', 'ultimate_post_kit_other_settings', 'off'); $this->enabled_audio_features = ultimate_post_kit_option('audio_link', 'ultimate_post_kit_other_settings', 'off'); if ($this->enabled_video_features == 'on' || $this->enabled_audio_features == 'on') { add_action('admin_init', [$this, 'upk_additional_features_fields']); add_action('save_post', [$this, 'upk_additional_features_save']); } } public function upk_additional_features_fields() { add_meta_box('upk_video_link_metabox', __('Ultimate Post Kit Additional', 'ultimate-post-kit'), [$this, 'upk_video_link_metabox_callback'], 'post', 'side', 'default'); } public function upk_video_link_metabox_callback($post) { wp_nonce_field('upk_additional_features_nonce_action', 'upk_additional_features_nonce_field'); $video_label = esc_html__('Video Link', 'ultimate-post-kit'); $video_link = get_post_meta($post->ID, '_upk_video_link_meta_key', true); $audio_link_label = esc_html__('Audio Link', 'ultimate-post-kit'); $audio_link = get_post_meta($post->ID, '_upk_audio_link_meta_key', true); $audio_label = esc_html__('Audio Title', 'ultimate-post-kit'); $audio_title = get_post_meta($post->ID, '_upk_audio_title_meta_key', true); $artist_label = esc_html__('Artist Name', 'ultimate-post-kit'); $artist_name = get_post_meta($post->ID, '_upk_artist_name_meta_key', true); $display_content = ''; $this->get_control_output($display_content); // Method escapes and echoes internally via wp_kses(). } public function get_control_output($output) { $tags = [ 'div' => ['class' => []], 'label' => ['for' => []], 'span' => ['scope' => [], 'class' => []], 'input' => ['type' => [], 'class' => [], 'id' => [], 'name' => [], 'value' => [], 'placeholder' => [], 'checked' => []], ]; if (isset($output)) { echo wp_kses($output, $tags); } } public function upk_additional_features_save($post_id) { if (!$this->is_secured_nonce('upk_additional_features_nonce_action', 'upk_additional_features_nonce_field', $post_id)) { return $post_id; } // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce verified in is_secured_nonce() above before any $_POST is read. $video_link = isset($_POST['_upk_video_link_meta_key']) ? sanitize_text_field(wp_unslash($_POST['_upk_video_link_meta_key'])) : ''; update_post_meta($post_id, '_upk_video_link_meta_key', $video_link); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce verified in is_secured_nonce() above before any $_POST is read. $audio_link = isset($_POST['_upk_audio_link_meta_key']) ? sanitize_text_field(wp_unslash($_POST['_upk_audio_link_meta_key'])) : ''; update_post_meta($post_id, '_upk_audio_link_meta_key', $audio_link); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce verified in is_secured_nonce() above before any $_POST is read. $audio_title = isset($_POST['_upk_audio_title_meta_key']) ? sanitize_text_field(wp_unslash($_POST['_upk_audio_title_meta_key'])) : ''; update_post_meta($post_id, '_upk_audio_title_meta_key', $audio_title); // phpcs:ignore WordPress.Security.NonceVerification.Missing -- nonce verified in is_secured_nonce() above before any $_POST is read. $artist_name = isset($_POST['_upk_artist_name_meta_key']) ? sanitize_text_field(wp_unslash($_POST['_upk_artist_name_meta_key'])) : ''; update_post_meta($post_id, '_upk_artist_name_meta_key', $artist_name); } protected function is_secured_nonce($action, $nonce_field, $post_id) { // phpcs:ignore WordPress.Security.NonceVerification.Missing -- reading the nonce value itself; it is validated with wp_verify_nonce() immediately below. $nonce = isset($_POST[$nonce_field]) ? sanitize_text_field(wp_unslash($_POST[$nonce_field])) : ''; if ($nonce == '') { return false; } elseif (!wp_verify_nonce($nonce, $action)) { return false; } elseif (!current_user_can('edit_post', $post_id)) { return false; } elseif (wp_is_post_autosave($post_id)) { return false; } elseif (wp_is_post_revision($post_id)) { return false; } else { return true; } } } new Ultimate_Post_Kit_Metabox(); }