OC GOP
Advertise Here

Virginia to mandate bar and restaurant drink to food ratios in 2026

Virginia to mandate bar and restaurant drink to food ratios in 2026

RICHMOND, VA – Legislation introduced in the 2026 General Assembly session seeks to adjust Virginia’s longstanding rules that determine how much food restaurants must sell compared to alcohol to maintain a mixed-beverage license.

House Bill 975, sponsored by Delegate Elizabeth Bennett-Parker, would require mixed-beverage restaurants, caterers, and limited caterers with monthly food sales of at least $4,000 and a kitchen equipped with a ventilation hood system to meet a food-to-beverage sales ratio of at least 30 percent. Other establishments without such facilities would be required to maintain a 45 percent food-to-beverage ratio.

/** * SNN Article Link Cleanup & Display Stability * Disable BOTH "Link Cleaner" and "WP Perf" before activating. * Paste into Code Snippets as PHP; run everywhere. * * Standard RSS feeds, REST output, schema and article identifiers * are not rewritten. Requires WordPress 6.2+ for link cleanup. */ if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) { final class SNN_Safe_Display_20261031 { public static function boot() { add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 ); add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 ); add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 ); } public static function head_cleanup() { if ( is_admin() ) { return; } remove_action( 'wp_head', 'wp_generator' ); remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); } public static function skip_request() { return is_admin() || is_feed() || is_trackback() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || wp_doing_ajax() || is_preview(); } /** * Remove UTM parameters while preserving other query parameters, * their order, encoding and the URL fragment. */ public static function clean_url( $url ) { if ( ! is_string( $url ) || $url === '' ) { return $url; } // Preserve non-web schemes such as mailto:, tel: and data:. if ( preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url ) && ! preg_match( '~^https?://~i', $url ) ) { return $url; } $parts = explode( '#', $url, 2 ); $base = explode( '?', $parts[0], 2 ); if ( count( $base ) !== 2 ) { return $url; } $pairs = explode( '&', $base[1] ); // Preserve commonly signed URLs. foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = strtolower( urldecode( $parameter[0] ) ); if ( in_array( $key, array( 'signature', 'sig', 'x-amz-signature', 'x-goog-signature', ), true ) ) { return $url; } } $kept = array(); $changed = false; foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = urldecode( $parameter[0] ); if ( stripos( $key, 'utm_' ) === 0 ) { $changed = true; continue; } $kept[] = $pair; } if ( ! $changed ) { return $url; } $query = implode( '&', $kept ); return $base[0] . ( $query !== '' ? '?' . $query : '' ) . ( isset( $parts[1] ) ? '#' . $parts[1] : '' ); } /** * Clean anchor URLs in displayed single-post content only. * Do not buffer or rewrite the full page or feed response. */ public static function article_links( $html ) { if ( ! is_string( $html ) || self::skip_request() || ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() || apply_filters( 'snn_safe_display_skip_links', false ) || ! class_exists( 'WP_HTML_Tag_Processor' ) ) { return $html; } $processor = new WP_HTML_Tag_Processor( $html ); while ( $processor->next_tag( 'A' ) ) { $href = $processor->get_attribute( 'href' ); if ( ! is_string( $href ) ) { continue; } $clean = self::clean_url( $href ); if ( $clean !== $href ) { $processor->set_attribute( 'href', $clean ); } } return $processor->get_updated_html(); } public static function display_css() { if ( self::skip_request() || ! is_singular( 'post' ) ) { return; } /* * Space reservations apply only to ad wrappers with these classes. * Adjust the heights to match your actual ad placements. * Unfilled ad slots can retain blank space. */ $css = ' .snn-ad-container.snn-ad-inarticle { min-height: 280px; } .snn-ad-container.snn-ad-sidebar { min-height: 280px; } .entry-content p.wp-block-paragraph { overflow-wrap: break-word; } @media (max-width: 921px) { .snn-ad-container.snn-ad-sidebar { min-height: 100px; } } '; wp_register_style( 'snn-safe-display', false, array(), '1.0.0' ); wp_enqueue_style( 'snn-safe-display' ); wp_add_inline_style( 'snn-safe-display', $css ); } } SNN_Safe_Display_20261031::boot(); }

The proposal also mandates that restaurants have a minimum number of seats at tables, as opposed to only counters, to qualify for such licenses.

In addition to tightening compliance standards, the bill directs the Virginia Alcoholic Beverage Control Authority (ABC) to collect data on how licensees are meeting food-to-beverage requirements and to analyze the impact of these changes on total food and alcohol sales across the state. ABC would be required to submit its findings to the House Committee on General Laws and the Senate Committee on Rehabilitation and Social Services by November 1, 2027.

Currently, Virginia law requires establishments with mixed-beverage licenses to maintain a food-to-beverage ratio to ensure they operate as bona fide restaurants rather than bars. HB 975 aims to refine that balance and improve oversight of license compliance.

HB 975 — Alcoholic beverage control; food-to-beverage ratio; report — introduced by Del. Elizabeth Bennett-Parker, remains pending committee referral in the House.

/** * SNN Article Link Cleanup & Display Stability * Disable BOTH "Link Cleaner" and "WP Perf" before activating. * Paste into Code Snippets as PHP; run everywhere. * * Standard RSS feeds, REST output, schema and article identifiers * are not rewritten. Requires WordPress 6.2+ for link cleanup. */ if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) { final class SNN_Safe_Display_20261031 { public static function boot() { add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 ); add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 ); add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 ); } public static function head_cleanup() { if ( is_admin() ) { return; } remove_action( 'wp_head', 'wp_generator' ); remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); } public static function skip_request() { return is_admin() || is_feed() || is_trackback() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || wp_doing_ajax() || is_preview(); } /** * Remove UTM parameters while preserving other query parameters, * their order, encoding and the URL fragment. */ public static function clean_url( $url ) { if ( ! is_string( $url ) || $url === '' ) { return $url; } // Preserve non-web schemes such as mailto:, tel: and data:. if ( preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url ) && ! preg_match( '~^https?://~i', $url ) ) { return $url; } $parts = explode( '#', $url, 2 ); $base = explode( '?', $parts[0], 2 ); if ( count( $base ) !== 2 ) { return $url; } $pairs = explode( '&', $base[1] ); // Preserve commonly signed URLs. foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = strtolower( urldecode( $parameter[0] ) ); if ( in_array( $key, array( 'signature', 'sig', 'x-amz-signature', 'x-goog-signature', ), true ) ) { return $url; } } $kept = array(); $changed = false; foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = urldecode( $parameter[0] ); if ( stripos( $key, 'utm_' ) === 0 ) { $changed = true; continue; } $kept[] = $pair; } if ( ! $changed ) { return $url; } $query = implode( '&', $kept ); return $base[0] . ( $query !== '' ? '?' . $query : '' ) . ( isset( $parts[1] ) ? '#' . $parts[1] : '' ); } /** * Clean anchor URLs in displayed single-post content only. * Do not buffer or rewrite the full page or feed response. */ public static function article_links( $html ) { if ( ! is_string( $html ) || self::skip_request() || ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() || apply_filters( 'snn_safe_display_skip_links', false ) || ! class_exists( 'WP_HTML_Tag_Processor' ) ) { return $html; } $processor = new WP_HTML_Tag_Processor( $html ); while ( $processor->next_tag( 'A' ) ) { $href = $processor->get_attribute( 'href' ); if ( ! is_string( $href ) ) { continue; } $clean = self::clean_url( $href ); if ( $clean !== $href ) { $processor->set_attribute( 'href', $clean ); } } return $processor->get_updated_html(); } public static function display_css() { if ( self::skip_request() || ! is_singular( 'post' ) ) { return; } /* * Space reservations apply only to ad wrappers with these classes. * Adjust the heights to match your actual ad placements. * Unfilled ad slots can retain blank space. */ $css = ' .snn-ad-container.snn-ad-inarticle { min-height: 280px; } .snn-ad-container.snn-ad-sidebar { min-height: 280px; } .entry-content p.wp-block-paragraph { overflow-wrap: break-word; } @media (max-width: 921px) { .snn-ad-container.snn-ad-sidebar { min-height: 100px; } } '; wp_register_style( 'snn-safe-display', false, array(), '1.0.0' ); wp_enqueue_style( 'snn-safe-display' ); wp_add_inline_style( 'snn-safe-display', $css ); } } SNN_Safe_Display_20261031::boot(); }

/** * SNN Article Link Cleanup & Display Stability * Disable BOTH "Link Cleaner" and "WP Perf" before activating. * Paste into Code Snippets as PHP; run everywhere. * * Standard RSS feeds, REST output, schema and article identifiers * are not rewritten. Requires WordPress 6.2+ for link cleanup. */ if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) { final class SNN_Safe_Display_20261031 { public static function boot() { add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 ); add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 ); add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 ); } public static function head_cleanup() { if ( is_admin() ) { return; } remove_action( 'wp_head', 'wp_generator' ); remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); } public static function skip_request() { return is_admin() || is_feed() || is_trackback() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || wp_doing_ajax() || is_preview(); } /** * Remove UTM parameters while preserving other query parameters, * their order, encoding and the URL fragment. */ public static function clean_url( $url ) { if ( ! is_string( $url ) || $url === '' ) { return $url; } // Preserve non-web schemes such as mailto:, tel: and data:. if ( preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url ) && ! preg_match( '~^https?://~i', $url ) ) { return $url; } $parts = explode( '#', $url, 2 ); $base = explode( '?', $parts[0], 2 ); if ( count( $base ) !== 2 ) { return $url; } $pairs = explode( '&', $base[1] ); // Preserve commonly signed URLs. foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = strtolower( urldecode( $parameter[0] ) ); if ( in_array( $key, array( 'signature', 'sig', 'x-amz-signature', 'x-goog-signature', ), true ) ) { return $url; } } $kept = array(); $changed = false; foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = urldecode( $parameter[0] ); if ( stripos( $key, 'utm_' ) === 0 ) { $changed = true; continue; } $kept[] = $pair; } if ( ! $changed ) { return $url; } $query = implode( '&', $kept ); return $base[0] . ( $query !== '' ? '?' . $query : '' ) . ( isset( $parts[1] ) ? '#' . $parts[1] : '' ); } /** * Clean anchor URLs in displayed single-post content only. * Do not buffer or rewrite the full page or feed response. */ public static function article_links( $html ) { if ( ! is_string( $html ) || self::skip_request() || ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() || apply_filters( 'snn_safe_display_skip_links', false ) || ! class_exists( 'WP_HTML_Tag_Processor' ) ) { return $html; } $processor = new WP_HTML_Tag_Processor( $html ); while ( $processor->next_tag( 'A' ) ) { $href = $processor->get_attribute( 'href' ); if ( ! is_string( $href ) ) { continue; } $clean = self::clean_url( $href ); if ( $clean !== $href ) { $processor->set_attribute( 'href', $clean ); } } return $processor->get_updated_html(); } public static function display_css() { if ( self::skip_request() || ! is_singular( 'post' ) ) { return; } /* * Space reservations apply only to ad wrappers with these classes. * Adjust the heights to match your actual ad placements. * Unfilled ad slots can retain blank space. */ $css = ' .snn-ad-container.snn-ad-inarticle { min-height: 280px; } .snn-ad-container.snn-ad-sidebar { min-height: 280px; } .entry-content p.wp-block-paragraph { overflow-wrap: break-word; } @media (max-width: 921px) { .snn-ad-container.snn-ad-sidebar { min-height: 100px; } } '; wp_register_style( 'snn-safe-display', false, array(), '1.0.0' ); wp_enqueue_style( 'snn-safe-display' ); wp_add_inline_style( 'snn-safe-display', $css ); } } SNN_Safe_Display_20261031::boot(); }
/** * SNN Article Link Cleanup & Display Stability * Disable BOTH "Link Cleaner" and "WP Perf" before activating. * Paste into Code Snippets as PHP; run everywhere. * * Standard RSS feeds, REST output, schema and article identifiers * are not rewritten. Requires WordPress 6.2+ for link cleanup. */ if ( ! class_exists( 'SNN_Safe_Display_20261031', false ) ) { final class SNN_Safe_Display_20261031 { public static function boot() { add_action( 'init', array( __CLASS__, 'head_cleanup' ), 20 ); add_filter( 'the_content', array( __CLASS__, 'article_links' ), 99 ); add_action( 'wp_enqueue_scripts', array( __CLASS__, 'display_css' ), 100 ); } public static function head_cleanup() { if ( is_admin() ) { return; } remove_action( 'wp_head', 'wp_generator' ); remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); } public static function skip_request() { return is_admin() || is_feed() || is_trackback() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || wp_doing_ajax() || is_preview(); } /** * Remove UTM parameters while preserving other query parameters, * their order, encoding and the URL fragment. */ public static function clean_url( $url ) { if ( ! is_string( $url ) || $url === '' ) { return $url; } // Preserve non-web schemes such as mailto:, tel: and data:. if ( preg_match( '/^[a-z][a-z0-9+.-]*:/i', $url ) && ! preg_match( '~^https?://~i', $url ) ) { return $url; } $parts = explode( '#', $url, 2 ); $base = explode( '?', $parts[0], 2 ); if ( count( $base ) !== 2 ) { return $url; } $pairs = explode( '&', $base[1] ); // Preserve commonly signed URLs. foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = strtolower( urldecode( $parameter[0] ) ); if ( in_array( $key, array( 'signature', 'sig', 'x-amz-signature', 'x-goog-signature', ), true ) ) { return $url; } } $kept = array(); $changed = false; foreach ( $pairs as $pair ) { $parameter = explode( '=', $pair, 2 ); $key = urldecode( $parameter[0] ); if ( stripos( $key, 'utm_' ) === 0 ) { $changed = true; continue; } $kept[] = $pair; } if ( ! $changed ) { return $url; } $query = implode( '&', $kept ); return $base[0] . ( $query !== '' ? '?' . $query : '' ) . ( isset( $parts[1] ) ? '#' . $parts[1] : '' ); } /** * Clean anchor URLs in displayed single-post content only. * Do not buffer or rewrite the full page or feed response. */ public static function article_links( $html ) { if ( ! is_string( $html ) || self::skip_request() || ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() || apply_filters( 'snn_safe_display_skip_links', false ) || ! class_exists( 'WP_HTML_Tag_Processor' ) ) { return $html; } $processor = new WP_HTML_Tag_Processor( $html ); while ( $processor->next_tag( 'A' ) ) { $href = $processor->get_attribute( 'href' ); if ( ! is_string( $href ) ) { continue; } $clean = self::clean_url( $href ); if ( $clean !== $href ) { $processor->set_attribute( 'href', $clean ); } } return $processor->get_updated_html(); } public static function display_css() { if ( self::skip_request() || ! is_singular( 'post' ) ) { return; } /* * Space reservations apply only to ad wrappers with these classes. * Adjust the heights to match your actual ad placements. * Unfilled ad slots can retain blank space. */ $css = ' .snn-ad-container.snn-ad-inarticle { min-height: 280px; } .snn-ad-container.snn-ad-sidebar { min-height: 280px; } .entry-content p.wp-block-paragraph { overflow-wrap: break-word; } @media (max-width: 921px) { .snn-ad-container.snn-ad-sidebar { min-height: 100px; } } '; wp_register_style( 'snn-safe-display', false, array(), '1.0.0' ); wp_enqueue_style( 'snn-safe-display' ); wp_add_inline_style( 'snn-safe-display', $css ); } } SNN_Safe_Display_20261031::boot(); }

Scroll to Top