'wpforms', 'post_status' => array( 'publish', 'private', 'draft' ), 'posts_per_page' => -1, 'orderby' => 'title', 'order' => 'ASC', ) ); foreach ( $posts as $post ) { $data = $this->decode( $post->post_content ); $fields = array(); foreach ( (array) ( $data['fields'] ?? array() ) as $field ) { if ( ! isset( $field['id'] ) || $this->skip_type( $field['type'] ?? '' ) ) { continue; } $fields[] = array( 'key' => (string) $field['id'], /* translators: %s: field id */ 'label' => wp_strip_all_tags( (string) ( $field['label'] ?? '' ) ) ?: sprintf( __( 'Field %s', 'beon-chat' ), $field['id'] ), 'type' => (string) ( $field['type'] ?? '' ), ); } $forms[ (string) $post->ID ] = array( 'title' => (string) ( $data['settings']['form_title'] ?? '' ) ?: $post->post_title, 'fields' => $fields, ); } return $forms; } public function listen() { add_action( 'wpforms_process_complete', array( $this, 'on_submit' ), 10, 4 ); } /** * @param array $fields Processed fields by id: {name, value, id, type}. * @param array $entry Raw entry. * @param array $form_data Form data (id, settings). */ public function on_submit( $fields, $entry, $form_data, $entry_id = 0 ) { $answers = array(); foreach ( (array) $fields as $id => $field ) { $answers[ (string) ( $field['id'] ?? $id ) ] = $this->text( $field['value'] ?? '' ); } Beon_Notify_Forms::submitted( $this->key(), (string) ( $form_data['id'] ?? '' ), $answers, (string) ( $form_data['settings']['form_title'] ?? '' ), $fields ); } private function decode( $content ) { if ( function_exists( 'wpforms_decode' ) ) { return (array) wpforms_decode( $content ); } $data = json_decode( (string) $content, true ); return is_array( $data ) ? $data : array(); } }