Created
September 1, 2015 00:46
-
-
Save galbaras/7bc92643cb331fd48f53 to your computer and use it in GitHub Desktop.
Add a WooCommerce attribute (minimum quantity) to a Contact Form 7 form. Can be easily adapted to other attributes, as well as product meta, terms, etc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Save product_quantity_field.php in your active theme directory, then | |
// add this line to your functions.php file to include it in the theme | |
include( get_stylesheet_directory() . '/product_quantity_field.php' ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
** A base module for the following types of tags: | |
** [quantity] and [quantity*] # Quantity | |
**/ | |
/* Shortcode handler */ | |
add_action( 'wpcf7_init', 'wpcf7_add_shortcode_quantity' ); | |
function wpcf7_add_shortcode_quantity() { | |
wpcf7_add_shortcode( array( 'quantity', 'quantity*' ), | |
'wpcf7_quantity_shortcode_handler', true ); | |
} | |
function wpcf7_quantity_shortcode_handler( $tag ) { | |
$tag = new WPCF7_Shortcode( $tag ); | |
if ( empty( $tag->name ) ) | |
return ''; | |
$validation_error = wpcf7_get_validation_error( $tag->name ); | |
$class = wpcf7_form_controls_class( $tag->type ); | |
$class .= ' wpcf7-validates-as-number'; | |
if ( $validation_error ) | |
$class .= ' wpcf7-not-valid'; | |
$atts = array(); | |
global $product; | |
$words = explode( ' ', $product->get_attribute( 'minimum-quantity' ) ); | |
$min = ( $words ? $words[0] : 1 ); | |
$atts['class'] = $tag->get_class_option( $class ); | |
$atts['id'] = $tag->get_id_option(); | |
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true ); | |
$atts['value'] = $min; | |
$atts['min'] = $min; | |
$atts['max'] = $min * 50; | |
$atts['step'] = $min; | |
if ( $tag->has_option( 'readonly' ) ) | |
$atts['readonly'] = 'readonly'; | |
if ( $tag->is_required() ) | |
$atts['aria-required'] = 'true'; | |
$atts['aria-invalid'] = $validation_error ? 'true' : 'false'; | |
if ( wpcf7_support_html5() ) { | |
$atts['type'] = 'number'; | |
} else { | |
$atts['type'] = 'text'; | |
} | |
$atts['name'] = $tag->name; | |
$atts = wpcf7_format_atts( $atts ); | |
$html = sprintf( | |
'<span class="wpcf7-form-control-wrap %1$s"><input %2$s />%3$s</span>', | |
sanitize_html_class( $tag->name ), $atts, $validation_error ); | |
return $html; | |
} | |
add_filter( 'wpcf7_validate_quantity', 'wpcf7_number_validation_filter', 10, 2 ); | |
add_filter( 'wpcf7_validate_quantity*', 'wpcf7_number_validation_filter', 10, 2 ); | |
/* Tag generator */ | |
if ( is_admin() ) { | |
add_action( 'admin_init', 'wpcf7_add_tag_generator_quantity', 18 ); | |
} | |
function wpcf7_add_tag_generator_quantity() { | |
$tag_generator = WPCF7_TagGenerator::get_instance(); | |
$tag_generator->add( 'quantity', __( 'quantity', 'contact-form-7' ), | |
'wpcf7_tag_generator_quantity' ); | |
} | |
function wpcf7_tag_generator_quantity( $contact_form, $args = '' ) { | |
$args = wp_parse_args( $args, array() ); | |
$type = 'quantity'; | |
$description = __( "Generate a form-tag for a field for numeric value input. For more details, see %s.", 'contact-form-7' ); | |
$desc_link = wpcf7_link( __( 'http://contactform7.com/number-fields/', 'contact-form-7' ), __( 'Number Fields', 'contact-form-7' ) ); | |
?> | |
<div class="control-box"> | |
<fieldset> | |
<legend><?php echo sprintf( esc_html( $description ), $desc_link ); ?></legend> | |
<table class="form-table"> | |
<tbody> | |
<tr> | |
<th scope="row"><?php echo esc_html( __( 'Field type', 'contact-form-7' ) ); ?></th> | |
<td> | |
<fieldset> | |
<legend class="screen-reader-text"><?php echo esc_html( __( 'Field type', 'contact-form-7' ) ); ?></legend> | |
<input type="hidden" name="tagtype" value="quantity"> | |
<label><input type="checkbox" name="required" /> <?php echo esc_html( __( 'Required field', 'contact-form-7' ) ); ?></label> | |
</fieldset> | |
</td> | |
</tr> | |
<tr> | |
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-name' ); ?>"><?php echo esc_html( __( 'Name', 'contact-form-7' ) ); ?></label></th> | |
<td><input type="text" name="name" class="tg-name oneline" id="<?php echo esc_attr( $args['content'] . '-name' ); ?>" /></td> | |
</tr> | |
<tr> | |
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-values' ); ?>"><?php echo esc_html( __( 'Default value', 'contact-form-7' ) ); ?></label></th> | |
<td><input type="text" name="values" class="oneline" id="<?php echo esc_attr( $args['content'] . '-values' ); ?>" /><br /> | |
<label><input type="checkbox" name="placeholder" class="option" /> <?php echo esc_html( __( 'Use this text as the placeholder of the field', 'contact-form-7' ) ); ?></label></td> | |
</tr> | |
<tr> | |
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-id' ); ?>"><?php echo esc_html( __( 'Id attribute', 'contact-form-7' ) ); ?></label></th> | |
<td><input type="text" name="id" class="idvalue oneline option" id="<?php echo esc_attr( $args['content'] . '-id' ); ?>" /></td> | |
</tr> | |
<tr> | |
<th scope="row"><label for="<?php echo esc_attr( $args['content'] . '-class' ); ?>"><?php echo esc_html( __( 'Class attribute', 'contact-form-7' ) ); ?></label></th> | |
<td><input type="text" name="class" class="classvalue oneline option" id="<?php echo esc_attr( $args['content'] . '-class' ); ?>" /></td> | |
</tr> | |
</tbody> | |
</table> | |
</fieldset> | |
</div> | |
<div class="insert-box"> | |
<input type="text" name="<?php echo $type; ?>" class="tag code" readonly="readonly" onfocus="this.select()" /> | |
<div class="submitbox"> | |
<input type="button" class="button button-primary insert-tag" value="<?php echo esc_attr( __( 'Insert Tag', 'contact-form-7' ) ); ?>" /> | |
</div> | |
<br class="clear" /> | |
<p class="description mail-tag"><label for="<?php echo esc_attr( $args['content'] . '-mailtag' ); ?>"><?php echo sprintf( esc_html( __( "To use the value input through this field in a mail field, you need to insert the corresponding mail-tag (%s) into the field on the Mail tab.", 'contact-form-7' ) ), '<strong><span class="mail-tag"></span></strong>' ); ?><input type="text" class="mail-tag code hidden" readonly="readonly" id="<?php echo esc_attr( $args['content'] . '-mailtag' ); ?>" /></label></p> | |
</div> | |
<?php | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment