{"id":381494,"date":"2026-10-06T06:42:49","date_gmt":"2026-10-06T06:42:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/jeytech-checkout-hours-for-woocommerce\/"},"modified":"2026-10-27T16:14:31","modified_gmt":"2026-10-27T16:14:31","slug":"jeytech-checkout-hours","status":"publish","type":"plugin","link":"https:\/\/ar.wordpress.org\/plugins\/jeytech-checkout-hours\/","author":23573036,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.1.3","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"JeyTech Checkout Hours for WooCommerce","header_author":"JeyTech","header_description":"Set weekly checkout hours while keeping your catalog and cart available. Supports classic checkout and Checkout Blocks.","assets_banners_color":"353920","last_updated":"2026-10-27 16:14:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/jeytech.app","rating":0,"author_block_rating":0,"active_installs":0,"downloads":376,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"jeytech","date":"2026-10-12 16:41:15","revision":3742161},"1.0.1":{"tag":"1.0.1","author":"jeytech","date":"2026-10-13 18:49:46","revision":3744720},"1.0.2":{"tag":"1.0.2","author":"jeytech","date":"2026-10-27 16:14:31","revision":3769022}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3753403,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3753403,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3753403,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3753403,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3769025,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"author\":\"JeyTech\",\"title\":\"jeytech-checkout-hours \\u2014 live demo\",\"description\":\"Isolated fictitious demo. Sample bank account: DO NOT PAY. No external HTTP or email.\"},\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"features\":{\"networking\":false},\"landingPage\":\"\\\/?pagename=demo-checkout\",\"steps\":[{\"step\":\"defineWpConfigConsts\",\"consts\":{\"DISABLE_WP_CRON\":true,\"WP_HTTP_BLOCK_EXTERNAL\":true}},{\"step\":\"writeFile\",\"path\":\"\\\/wordpress\\\/wp-content\\\/mu-plugins\\\/jeytech-preview.php\",\"data\":\"<?php\\n\\\/\\\/ Isolated preview only: no email, external HTTP, cron or async queue runner.\\nadd_filter('pre_wp_mail', '__return_true');\\nadd_filter('pre_http_request', function(){ return new WP_Error('preview_offline', 'External HTTP is disabled in this demo.'); }, 1);\\nadd_filter('action_scheduler_allow_async_request_runner', '__return_false');\\nadd_filter('woocommerce_enable_setup_wizard', '__return_false');\\nadd_filter('woocommerce_show_admin_notice', '__return_false');\\n\\\/\\\/ Focus the actual plugin output, preserving its own HTML and behavior.\\nadd_action('wp_footer', function(){ echo '<script>document.addEventListener(\\\"DOMContentLoaded\\\",function(){const e=document.querySelector(\\\".jeytech-otqr-payment,.jeytech-sdbb-safety,.jeytech-tdph-lowest-price\\\");if(e)e.scrollIntoView({block:\\\"center\\\"});});<\\\/script>'; });\\nadd_action('admin_footer', function(){ if (($_GET['page'] ?? '') === 'jeytech-uog') echo '<script>document.querySelector(\\\".widefat.striped\\\")?.scrollIntoView({block:\\\"center\\\"});<\\\/script>'; });\\nadd_action('template_redirect', function(){\\n if (is_page('demo-order')) {\\n  $o=wc_get_order(get_option('jeytech_preview_order'));\\n  if ($o) { wp_safe_redirect($o->get_checkout_order_received_url()); exit; }\\n }\\n if (is_page('demo-checkout') || is_page('demo-cart')) {\\n  if (null === WC()->cart) wc_load_cart();\\n  WC()->customer->set_billing_country('FR'); WC()->customer->set_shipping_country('FR');\\n  WC()->customer->set_shipping_postcode('75001'); WC()->customer->set_shipping_city('Paris');\\n  if (WC()->cart->is_empty()) WC()->cart->add_to_cart(get_option('jeytech_preview_product'));\\n }\\n}, 1);\\n\"},{\"step\":\"setSiteOptions\",\"options\":{\"show_avatars\":0,\"blogname\":\"JeyTech \\u2014 sample store\",\"blogdescription\":\"Isolated demo \\u2014 all data is fictitious. Never send a payment.\",\"timezone_string\":\"Europe\\\/Paris\",\"woocommerce_currency\":\"EUR\",\"woocommerce_default_country\":\"FR\",\"woocommerce_store_address\":\"1 Example Demo Street (fictitious)\",\"woocommerce_store_city\":\"Paris\",\"woocommerce_store_postcode\":\"75001\",\"woocommerce_coming_soon\":\"no\",\"woocommerce_enable_guest_checkout\":\"yes\",\"woocommerce_onboarding_profile\":{\"completed\":true,\"skipped\":true},\"woocommerce_task_list_hidden\":\"yes\",\"woocommerce_allow_tracking\":\"no\",\"woocommerce_enable_marketplace_suggestions\":\"no\",\"woocommerce_custom_orders_table_enabled\":\"no\",\"woocommerce_bacs_settings\":{\"enabled\":\"yes\",\"title\":\"Bank transfer \\u2014 SAMPLE ONLY\",\"description\":\"Fictitious bank account for demo only. DO NOT send money.\"},\"woocommerce_bacs_accounts\":[{\"account_name\":\"SAMPLE ONLY - DO NOT PAY\",\"iban\":\"DE36000000000000000000\",\"bic\":\"\",\"bank_name\":\"FICTITIOUS BANK - zero bank code\",\"account_number\":\"\",\"sort_code\":\"\"}],\"permalink_structure\":\"\\\/%postname%\\\/\",\"woocommerce_price_decimal_sep\":\".\",\"woocommerce_price_thousand_sep\":\",\",\"woocommerce_currency_pos\":\"right_space\",\"woocommerce_price_num_decimals\":2}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"jeytech-checkout-hours\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire '\\\/wordpress\\\/wp-load.php';\\nwp_set_current_user(1);\\nWC_Install::create_pages();\\nforeach(WC()->mailer()->get_emails() as $email) add_filter('woocommerce_email_enabled_'.$email->id,'__return_false');\\nfunction demo_product($name='Demo notebook') { $p=new WC_Product_Simple(); $p->set_name($name); $p->set_slug('demo-notebook'); $p->set_status('publish'); $p->set_regular_price('25'); $p->set_description('Fictitious Playground demo. No payments or delivery.'); $p->save(); update_option('jeytech_preview_product',$p->get_id()); return $p; }\\nfunction demo_page($slug,$title,$content) { return wp_insert_post(array('post_type'=>'page','post_status'=>'publish','post_name'=>$slug,'post_title'=>$title,'post_content'=>$content)); }\\n$p=demo_product();$p->set_virtual(true);$p->save();\\n$days=array_fill(1,7,array());$tomorrow=(int)current_datetime()->modify('+1 day')->format('N');$days[$tomorrow]=array(array('start'=>'09:00','end'=>'12:00'),array('start'=>'14:00','end'=>'18:00'));\\nupdate_option(\\\\JeyTech\\\\CheckoutHours\\\\Settings::OPTION,array('enabled'=>true,'mode'=>'block','banner'=>true,'schedule'=>$days));\\n$checkout=demo_page('demo-checkout','Outside order hours \\u2014 checkout closed','[woocommerce_checkout]');update_option('woocommerce_checkout_page_id',$checkout);\\ndemo_page('demo-hours','Opening hours','[jeytech_checkout_hours]');\\nflush_rewrite_rules();\\necho wp_json_encode(array('wp'=>get_bloginfo('version'),'wc'=>WC_VERSION,'php'=>PHP_VERSION,'product'=>get_option('jeytech_preview_product'),'order'=>get_option('jeytech_preview_order'),'external_http'=>'blocked','mail'=>'blocked'));\\n\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3730131,"resolution":"1","location":"assets","locale":"","width":1238,"height":1628},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3730131,"resolution":"2","location":"assets","locale":"","width":1440,"height":2955},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3730131,"resolution":"3","location":"assets","locale":"","width":1440,"height":1412},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3730131,"resolution":"4","location":"assets","locale":"","width":1238,"height":1668},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3730131,"resolution":"5","location":"assets","locale":"","width":1440,"height":2988},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3730131,"resolution":"6","location":"assets","locale":"","width":1440,"height":1263}},"screenshots":{"1":"Weekly schedule with multiple ranges, overnight shifts and a live store-timezone preview.","2":"Classic checkout outside order hours, with the cart preserved.","3":"Checkout Blocks outside order hours, with server-side order protection."}},"plugin_section":[],"plugin_tags":[3148,15082,200749,284641,286],"plugin_category":[45],"plugin_contributors":[282653],"plugin_business_model":[],"class_list":["post-381494","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-opening-hours","plugin_tags-store-hours","plugin_tags-weekly-schedule","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-jeytech","plugin_committers-jeytech"],"banners":{"banner":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/banner-772x250.png?rev=3753403","banner_2x":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/banner-1544x500.png?rev=3753403","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/icon-128x128.png?rev=3753403","icon_2x":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/icon-256x256.png?rev=3753403","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-1.png?rev=3730131","caption":"Weekly schedule with multiple ranges, overnight shifts and a live store-timezone preview."},{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-2.png?rev=3730131","caption":"Classic checkout outside order hours, with the cart preserved."},{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-3.png?rev=3730131","caption":"Checkout Blocks outside order hours, with server-side order protection."},{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-4.png?rev=3730131","caption":""},{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-5.png?rev=3730131","caption":""},{"src":"https:\/\/ps.w.org\/jeytech-checkout-hours\/assets\/screenshot-6.png?rev=3730131","caption":""}],"raw_content":"<!--section=description-->\n<p>JeyTech Checkout Hours for WooCommerce lets you choose when customers can place new orders. Products stay visible and shoppers can keep filling their cart outside your order hours.<\/p>\n\n<p>Configure your schedule under <strong>WooCommerce \u2192 Checkout Hours<\/strong>. The plugin is disabled on installation and remains inactive until you save and enable a valid opening schedule.<\/p>\n\n<ul>\n<li>Multiple opening ranges per weekday, including lunch breaks.<\/li>\n<li>Overnight ranges and full days using 00:00\u201324:00.<\/li>\n<li>Your WordPress timezone, including daylight saving changes.<\/li>\n<li>Block checkout or accept orders with an outside-hours warning.<\/li>\n<li>Server-side protection for classic checkout and WooCommerce Checkout Blocks.<\/li>\n<li>Optional sitewide notice and <code>[jeytech_checkout_hours]<\/code> shortcode.<\/li>\n<li>Live status refresh for cached pages; final checkout is always checked on the server.<\/li>\n<li>Compatible with High-Performance Order Storage (HPOS).<\/li>\n<\/ul>\n\n<p>Opening times are included and closing times are excluded. A closing time before opening continues into the following day. Overlapping ranges cannot be saved.<\/p>\n\n<p>Warning mode accepts orders normally. It does not reserve pickup slots, delay payment or schedule fulfillment. Existing order payments, catalog browsing and cart changes are unaffected.<\/p>\n\n<p>The plugin makes no external service requests and includes no tracking. The live status endpoint is a read-only endpoint on your own WordPress site. Its response must be excluded from any proxy or CDN cache that overrides no-store headers.<\/p>\n\n<p>Requirements: WordPress 6.6 or later, WooCommerce 9.6 or later, PHP 7.4 or later.<\/p>\n\n<h4>Other free JeyTech plugins<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-unpaid-transfer-guard\/\">JeyTech Unpaid Transfer Guard<\/a> \u2014 Preview and cancel eligible unpaid bank transfer orders.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-order-transfer-qr\/\">JeyTech Order Transfer QR<\/a> \u2014 Add a SEPA QR code to unpaid bank transfer orders.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-shipping-cutoff\/\">JeyTech Shipping Cutoff<\/a> \u2014 Hide one shipping method after your daily cutoff.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-30-day-price-history\/\">JeyTech 30-Day Price History<\/a> \u2014 Display the recorded lowest price before a reduction.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-safety-data-by-brand\/\">JeyTech Safety Data by Brand<\/a> \u2014 Set manufacturer and safety information once per brand.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-unit-price-guard\/\">JeyTech Unit Price Guard<\/a> \u2014 Show unit prices from product and variation net quantities.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-below-cost-guard\/\">JeyTech Below Cost Guard<\/a> \u2014 Check discounted product totals against WooCommerce costs.<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/jeytech-replenishment-reminder\/\">JeyTech Replenishment Reminder<\/a> \u2014 Send optional restock reminders with customer consent.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/jeytech.app\/tutorials\/woocommerce-checkout-hours\/\">Setup tutorial<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install it through WordPress.<\/li>\n<li>Activate JeyTech Checkout Hours for WooCommerce.<\/li>\n<li>Go to WooCommerce \u2192 Checkout Hours and check the store timezone.<\/li>\n<li>Add opening ranges, choose the outside-hours mode, enable and save.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20shoppers%20still%20add%20products%20to%20their%20cart%20outside%20order%20hours%3F\"><h3>Can shoppers still add products to their cart outside order hours?<\/h3><\/dt>\n<dd><p>Yes. Only the placement of new orders is restricted in block mode. Your catalog and cart stay available.<\/p><\/dd>\n<dt id=\"does%20it%20support%20both%20woocommerce%20checkouts%3F\"><h3>Does it support both WooCommerce checkouts?<\/h3><\/dt>\n<dd><p>Yes. It validates classic checkout on the server and rejects a new Checkout Blocks order before the Store API creates or processes it.<\/p><\/dd>\n<dt id=\"which%20timezone%20is%20used%3F\"><h3>Which timezone is used?<\/h3><\/dt>\n<dd><p>The timezone configured in Settings \u2192 General in WordPress. Choose a city timezone such as Europe\/Paris if you want automatic daylight saving changes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20enter%20an%20overnight%20shift%20or%20a%20full%20day%3F\"><h3>How do I enter an overnight shift or a full day?<\/h3><\/dt>\n<dd><p>Use 22:00\u201302:00 for an overnight range. It ends at 02:00 on the following day. Use 00:00\u201324:00 for a full day. Leave a day blank to close it.<\/p><\/dd>\n<dt id=\"what%20happens%20during%20a%20daylight%20saving%20change%3F\"><h3>What happens during a daylight saving change?<\/h3><\/dt>\n<dd><p>Ranges follow the local wall clock. A repeated hour follows the same schedule in both occurrences. A skipped hour has no real instants; the next opening is the first real instant inside an opening range.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20a%20cached%20page%20or%20without%20javascript%3F\"><h3>Does it work with a cached page or without JavaScript?<\/h3><\/dt>\n<dd><p>Final checkout is protected on the server regardless of page caching or JavaScript. Live notices refresh from a noncached local endpoint with JavaScript. A theme must support wp_body_open for the optional sitewide banner.<\/p><\/dd>\n<dt id=\"does%20it%20block%20payment%20for%20an%20existing%20order%3F\"><h3>Does it block payment for an existing order?<\/h3><\/dt>\n<dd><p>No. Existing order-payment pages and order-specific Store API routes remain available.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20translated%3F\"><h3>Is the plugin translated?<\/h3><\/dt>\n<dd><p>Source strings are English. Translations are delivered by WordPress.org language packs after community validation, without bundled catalogs or custom language loading.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Add optional, per-user dismissible links to other free JeyTech tools on this plugin's settings page.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Add an optional review invitation on this plugin's settings screen after 14 days and feature use, with per-user snooze and permanent dismissal.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with weekly checkout hours, classic and Blocks protection, live notices and a shared timezone engine.<\/li>\n<\/ul>","raw_excerpt":"Set weekly checkout hours while keeping your catalog and cart available. Supports classic checkout and Checkout Blocks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/381494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=381494"}],"author":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jeytech"}],"wp:attachment":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=381494"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=381494"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=381494"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=381494"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=381494"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=381494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}