name ) ) return ''; $validation_error = wpcf7_get_validation_error( $tag->name ); $class = wpcf7_form_controls_class( $tag->type ); if ( $validation_error ) $class .= ' wpcf7-not-valid'; if ( $tag->has_option( 'invert' ) ) $class .= ' wpcf7-invert'; $atts = array(); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true ); if ( $tag->has_option( 'default:on' ) ) $atts['checked'] = 'checked'; $atts['aria-invalid'] = $validation_error ? 'true' : 'false'; $atts['type'] = 'checkbox'; $atts['name'] = $tag->name; $atts['value'] = '1'; $atts = wpcf7_format_atts( $atts ); $html = sprintf( '%3$s', sanitize_html_class( $tag->name ), $atts, $validation_error ); return $html; } /* Validation filter */ add_filter( 'wpcf7_validate_acceptance', 'wpcf7_acceptance_validation_filter', 10, 2 ); function wpcf7_acceptance_validation_filter( $result, $tag ) { if ( ! wpcf7_acceptance_as_validation() ) return $result; $tag = new WPCF7_Shortcode( $tag ); $name = $tag->name; $value = ( ! empty( $_POST[$name] ) ? 1 : 0 ); $invert = $tag->has_option( 'invert' ); if ( $invert && $value || ! $invert && ! $value ) { $result->invalidate( $tag, wpcf7_get_message( 'accept_terms' ) ); } return $result; } /* Acceptance filter */ add_filter( 'wpcf7_acceptance', 'wpcf7_acceptance_filter' ); function wpcf7_acceptance_filter( $accepted ) { if ( ! $accepted ) return $accepted; $fes = wpcf7_scan_shortcode( array( 'type' => 'acceptance' ) ); foreach ( $fes as $fe ) { $name = $fe['name']; $options = (array) $fe['options']; if ( empty( $name ) ) continue; $value = ( ! empty( $_POST[$name] ) ? 1 : 0 ); $invert = (bool) preg_grep( '%^invert$%', $options ); if ( $invert && $value || ! $invert && ! $value ) $accepted = false; } return $accepted; } add_filter( 'wpcf7_form_class_attr', 'wpcf7_acceptance_form_class_attr' ); function wpcf7_acceptance_form_class_attr( $class ) { if ( wpcf7_acceptance_as_validation() ) return $class . ' wpcf7-acceptance-as-validation'; return $class; } function wpcf7_acceptance_as_validation() { if ( ! $contact_form = wpcf7_get_current_contact_form() ) return false; return $contact_form->is_true( 'acceptance_as_validation' ); } /* Tag generator */ add_action( 'wpcf7_admin_init', 'wpcf7_add_tag_generator_acceptance', 35 ); function wpcf7_add_tag_generator_acceptance() { $tag_generator = WPCF7_TagGenerator::get_instance(); $tag_generator->add( 'acceptance', __( 'acceptance', 'contact-form-7' ), 'wpcf7_tag_generator_acceptance' ); } function wpcf7_tag_generator_acceptance( $contact_form, $args = '' ) { $args = wp_parse_args( $args, array() ); $type = 'acceptance'; $description = __( "Generate a form-tag for an acceptance checkbox. For more details, see %s.", 'contact-form-7' ); $desc_link = wpcf7_link( __( 'http://contactform7.com/acceptance-checkbox/', 'contact-form-7' ), __( 'Acceptance Checkbox', 'contact-form-7' ) ); ?>