Inventory_Presser_Contact_Form_7::handler_vehicle( object $tag )
handler_vehicle
On This Page
Parameters Parameters
- $tag
-
(object) (Required)
Return Return
(void)
Source Source
File: includes/integrations/class-contact-form-7.php
public function handler_vehicle( $tag ) { $validation_error = wpcf7_get_validation_error( $tag->name ); $atts = array( 'id' => '', ); if ( ! empty( $tag->options ) ) { array_walk( $tag->options, function ( $item ) use ( &$atts ) { list( $key, $val ) = explode( ':', $item ); $atts[ $key ] = $val; } ); } // Is this a vehicle details page? if ( is_singular( INVP::POST_TYPE ) ) { // Yes. Return two hidden fields. // Vehicle field. // <input type="hidden" name="vehicle" value="2022 KTM 890 DUKE R, K30451" />. $input_atts = array( 'type' => 'hidden', 'name' => $tag->name, 'value' => $this->prepare_value(), ); if ( ! empty( $atts['id'] ) ) { $input_atts['id'] = $atts['id']; } $html = sprintf( '<input %s />', wpcf7_format_atts( $input_atts ) ); // Post ID field. // <input type="hidden" name="post_id" value="257" />. $input_atts = array( 'type' => 'hidden', 'name' => 'post_id', 'value' => get_the_ID(), ); $html .= sprintf( '<input %s />', wpcf7_format_atts( $input_atts ) ); return apply_filters( 'invp_cf7_field_vehicle_html', $html . $validation_error, $atts ); } /** * Here's a query to get the post IDs of the vehicles we want * in the order we want. The reason we are not using get_posts * is because we want to sort by 3 post meta values */ global $wpdb; $post_ids = $wpdb->get_col( $wpdb->prepare( " SELECT DISTINCT ID FROM $wpdb->posts LEFT JOIN $wpdb->postmeta meta1 ON $wpdb->posts.ID = meta1.post_id LEFT JOIN $wpdb->postmeta meta2 ON $wpdb->posts.ID = meta2.post_id LEFT JOIN $wpdb->postmeta meta3 ON $wpdb->posts.ID = meta3.post_id WHERE post_type = %s AND post_status = 'publish' AND meta1.meta_key = %s AND meta2.meta_key = %s AND meta3.meta_key = %s ORDER BY meta1.meta_value DESC, meta2.meta_value ASC, meta3.meta_value ASC ", INVP::POST_TYPE, apply_filters( 'invp_prefix_meta_key', 'year' ), apply_filters( 'invp_prefix_meta_key', 'make' ), apply_filters( 'invp_prefix_meta_key', 'model' ) ) ); // no results? no HTML. if ( empty( $post_ids ) ) { return apply_filters( 'invp_cf7_field_vehicle_html', '' . $validation_error, $atts ); } // build a drop down select. $select_atts = array( 'name' => $tag->name, 'class' => wpcf7_form_controls_class( 'select' ), ); if ( ! empty( $atts['id'] ) ) { $select_atts['id'] = $atts['id']; } $html = sprintf( '<span class="wpcf7-form-control-wrap" data-name="%s"><select %s><option value="">%s</option>', esc_attr( $tag->name ), wpcf7_format_atts( $select_atts ), __( 'Please choose a vehicle...', 'inventory-presser' ) ); foreach ( $post_ids as $post_id ) { // is this vehicle sold? if ( has_term( 'sold', 'availability', $post_id ) ) { continue; } $meta = get_metadata( 'post', $post_id ); // label is "2005 Subaru Baja Turbo, Blue, #12022". $html .= sprintf( '<option value="%s" %s>%s %s %s', esc_attr( $this->prepare_value( $post_id ) ), isset( $_REQUEST['v'] ) ? selected( $post_id, sanitize_text_field( wp_unslash( $_REQUEST['v'] ) ), false ) : '', esc_html( $meta[ apply_filters( 'invp_prefix_meta_key', 'year' ) ][0] ), esc_html( $meta[ apply_filters( 'invp_prefix_meta_key', 'make' ) ][0] ), esc_html( $meta[ apply_filters( 'invp_prefix_meta_key', 'model' ) ][0] ) ); if ( isset( $meta[ apply_filters( 'invp_prefix_meta_key', 'trim' ) ][0] ) ) { $html .= ' ' . $meta[ apply_filters( 'invp_prefix_meta_key', 'trim' ) ][0]; } if ( isset( $meta[ apply_filters( 'invp_prefix_meta_key', 'color' ) ][0] ) ) { $html .= ', ' . $meta[ apply_filters( 'invp_prefix_meta_key', 'color' ) ][0]; } if ( isset( $meta[ apply_filters( 'invp_prefix_meta_key', 'stock_number' ) ][0] ) ) { $html .= sprintf( ', #%s', $meta[ apply_filters( 'invp_prefix_meta_key', 'stock_number' ) ][0] ); } $html .= '</option>'; } return apply_filters( 'invp_cf7_field_vehicle_html', $html . '</select></span>' . $validation_error, $atts ); }
Expand full source codeCollapse full source codeView on Github