Make an ACF End Date Come After the Start Date
Blocks saving when an end date field is earlier than its start date field, such as for events, offers or bookings.
Opens WPIDE on
Code
// End date field name, and the start date field's key.
$wpide_acf_end_field = 'end_date';
$wpide_acf_start_key = 'field_start_date';
add_filter( 'acf/validate_value/name=' . $wpide_acf_end_field, function ( $valid, $value ) use ( $wpide_acf_start_key ) {
if ( true !== $valid || '' === (string) $value || empty( $_POST['acf'][ $wpide_acf_start_key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification -- ACF verifies its own nonce.
return $valid;
}
$start = sanitize_text_field( wp_unslash( $_POST['acf'][ $wpide_acf_start_key ] ) ); // phpcs:ignore WordPress.Security.NonceVerification
// ACF date and date-time pickers submit sortable values (Ymd or Y-m-d H:i:s).
if ( strtotime( (string) $value ) < strtotime( $start ) ) {
return 'The end date must be on or after the start date.';
}
return $valid;
}, 10, 2 );
Notes
Set the field names and the start field's key (shown under each field when "Field Keys" is ticked in Screen Options).
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.