Inventory_Presser_WPForms
On This Page
Description Description
Adds a smart tag that creates ADF XML for email bodies sent to CRMs.
Source Source
File: includes/integrations/class-wpforms.php
class Inventory_Presser_WPForms extends Inventory_Presser_Forms_Integration {
/**
* Adds hooks and registers a field type that power our WPForms integration.
*
* @return void
*/
public function add_hooks() {
add_filter( 'wpforms_smart_tags', array( $this, 'smart_tags_register' ), 10, 1 );
add_filter( 'wpforms_smart_tag_process', array( $this, 'smart_tags_process' ), 10, 2 );
// No hook because this add_hooks() method is called at plugins_loaded hook.
if ( ! class_exists( 'WPForms_Field' ) || ! empty( $this->field_instance ) ) {
return;
}
include_once plugin_dir_path( INVP_PLUGIN_FILE_PATH ) . 'includes/integrations/class-wpforms-field-vehicle.php';
$this->field_instance = new WPForms_Field_Vehicle();
// Add our field type to the list of allowed fields in wpforms_get_form_fields().
add_filter( 'wpforms_get_form_fields_allowed', array( $this, 'add_field_types' ) );
}
/**
* Adds our field type to the list of field types WPForms recognizes as
* valid.
*
* @param array $allowed_form_fields
* @return array
*/
public function add_field_types( $allowed_form_fields ) {
$allowed_form_fields[] = 'vehicle';
return $allowed_form_fields;
}
/**
* Creates the vehicle piece of an ADF XML lead.
*
* @return string
*/
protected function adf_vehicle_xml() {
$form_post_id = intval( $_POST['wpforms']['id'] ?? '' );
$fields = wpforms_get_form_fields( $form_post_id );
$field_id = 0;
foreach ( $fields as $field ) {
if ( 'vehicle' !== $field['type'] ) {
continue;
}
$field_id = $field['id'];
break;
}
if ( 0 === $field_id ) {
return '';
}
$value = sanitize_text_field( wp_unslash( $_POST['wpforms']['fields'][ $field_id ] ?? '' ) );
$post_id = $this->extract_post_id_from_value( $value );
if ( empty( $post_id ) ) {
return '';
}
return sprintf(
'<vehicle><id>%s</id><year>%s</year><make>%s</make><model>%s</model><vin>%s</vin><stock>%s</stock></vehicle>',
INVP::get_meta( 'car_id', $post_id ),
invp_get_the_year( $post_id ),
invp_get_the_make( $post_id ),
invp_get_the_model( $post_id ),
invp_get_the_vin( $post_id ),
invp_get_the_stock_number( $post_id )
);
}
/**
* Register Smart Tags with the form builder.
*
* @link https://wpforms.com/developers/how-to-create-a-custom-smart-tag/
*
* @param array $tags
* @return array
*/
public function smart_tags_register( $tags ) {
// Key is the tag, item is the tag name.
foreach ( $this->tags() as $tag => $name ) {
$tags[ $tag ] = $name;
}
return $tags;
}
/**
* Process the Smart Tags when rendering entries.
*
* @link https://wpforms.com/developers/how-to-create-a-custom-smart-tag/
*/
public function smart_tags_process( $content, $tag ) {
$our_tags = array_keys( $this->tags() );
if ( ! in_array( $tag, $our_tags, true ) ) {
return $content;
}
switch ( $tag ) {
case 'invp_adf_vehicle':
$content = str_replace( '{invp_adf_vehicle}', $this->adf_vehicle_xml(), $content );
break;
case 'invp_site_url':
$content = str_replace( '{invp_site_url}', site_url(), $content );
break;
}
return $content;
}
/**
* Returns an array of WP Forms Smart Tags we support.
*
* @return array
*/
protected function tags() {
return array(
'invp_adf_vehicle' => __( 'ADF XML Vehicle', 'inventory-presser' ),
'invp_site_url' => __( 'Site URL', 'inventory-presser' ),
);
}
}
Expand full source codeCollapse full source codeView on Github
Methods Methods
- add_field_types — Adds our field type to the list of field types WPForms recognizes as valid.
- add_hooks — Adds hooks and registers a field type that power our WPForms integration.
- adf_vehicle_xml — Creates the vehicle piece of an ADF XML lead.
- smart_tags_process — Process the Smart Tags when rendering entries.
- smart_tags_register — Register Smart Tags with the form builder.
- tags — Returns an array of WP Forms Smart Tags we support.