{"id":10681,"date":"2025-10-29T11:19:41","date_gmt":"2025-10-29T11:19:41","guid":{"rendered":"https:\/\/affinite.io\/cs\/?p=10681"},"modified":"2025-10-29T11:20:21","modified_gmt":"2025-10-29T11:20:21","slug":"woocomerce-hpos-detailni-prehled","status":"publish","type":"post","link":"https:\/\/affinite.io\/cs\/woocomerce-hpos-detailni-prehled\/","title":{"rendered":"WooComerce HPOS – detailn\u00ed p\u0159ehled"},"content":{"rendered":"\n
HPOS (High-Performance Order Storage)<\/strong> je nov\u00e1 architektura ukl\u00e1d\u00e1n\u00ed objedn\u00e1vek ve WooCommerce, kter\u00e1 nahrazuje p\u016fvodn\u00ed syst\u00e9m zalo\u017een\u00fd na WordPress posts tabulk\u00e1ch.<\/p>\n\n\n\n Probl\u00e9my p\u016fvodn\u00edho syst\u00e9mu:<\/strong><\/p>\n\n\n\n V\u00fdhody HPOS:<\/strong><\/p>\n\n\n\n Hlavn\u00ed implementa\u010dn\u00ed soubory:<\/strong><\/p>\n\n\n\n HPOS pou\u017e\u00edv\u00e1 4 hlavn\u00ed tabulky<\/strong> pro ukl\u00e1d\u00e1n\u00ed objedn\u00e1vek:<\/p>\n\n\n\n \u00da\u010del:<\/strong> Ukl\u00e1d\u00e1 z\u00e1kladn\u00ed informace o objedn\u00e1vce<\/p>\n\n\n\n Struktura:<\/strong><\/p>\n\n\n\n Popis kl\u00ed\u010dov\u00fdch sloupc\u016f:<\/strong><\/p>\n\n\n\n Implementace:<\/strong> \u00da\u010del:<\/strong> Ukl\u00e1d\u00e1 billing a shipping adresy v normalizovan\u00e9 form\u011b<\/p>\n\n\n\n Struktura:<\/strong><\/p>\n\n\n\n Popis:<\/strong><\/p>\n\n\n\n D\u016fle\u017eit\u00e9:<\/strong><\/p>\n\n\n\n \u00da\u010del:<\/strong> Intern\u00ed data pro WooCommerce funkcionality<\/p>\n\n\n\n Struktura:<\/strong><\/p>\n\n\n\n Popis:<\/strong><\/p>\n\n\n\n1.1 Pro\u010d HPOS?<\/h3>\n\n\n\n
\n
wp_posts<\/code>, post_type = 'shop_order'<\/code>)<\/li>\n\n\n\nwp_postmeta<\/code> (billing, shipping, platby…)<\/li>\n\n\n\n\n
1.2 Souborov\u00e1 struktura v k\u00f3du<\/h3>\n\n\n\n
\/src\/Internal\/DataStores\/Orders\/\n CustomOrdersTableController.php # \u0158\u00edzen\u00ed HPOS funkcionality\n OrdersTableDataStore.php # CRUD operace nad HPOS tabulkami\n DataSynchronizer.php # Synchronizace posts \u2194 HPOS\n LegacyDataHandler.php # Kompatibilita se star\u00fdm syst\u00e9mem\n OrdersTableQuery.php # SQL query builder\n\n\/src\/Database\/Migrations\/CustomOrderTable\/\n PostsToOrdersMigrationController.php # Orchestrace migrace\n PostToOrderTableMigrator.php # Migrace posts \u2192 orders\n PostMetaToOrderMetaMigrator.php # Migrace postmeta \u2192 orders_meta\n PostToOrderAddressTableMigrator.php # Extrakce adres\n PostToOrderOpTableMigrator.php # Extrakce opera\u010dn\u00edch dat\n\n\/src\/Utilities\/\n OrderUtil.php # Helper funkce pro pr\u00e1ci s HPOS<\/code><\/pre>\n\n\n\n
\n\n\n\n2. HPOS Datab\u00e1zov\u00e9 tabulky<\/h2>\n\n\n\n
2.1
wp_wc_orders<\/code> – Hlavn\u00ed tabulka objedn\u00e1vek<\/h3>\n\n\n\nCREATE TABLE `wp_wc_orders` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `status` varchar(20) DEFAULT NULL,\n `currency` varchar(10) DEFAULT NULL,\n `type` varchar(20) DEFAULT NULL,\n `tax_amount` decimal(26,8) DEFAULT 0,\n `total_amount` decimal(26,8) DEFAULT 0,\n `customer_id` bigint(20) unsigned DEFAULT NULL,\n `billing_email` varchar(320) DEFAULT NULL,\n `date_created_gmt` datetime DEFAULT NULL,\n `date_updated_gmt` datetime DEFAULT NULL,\n `parent_order_id` bigint(20) unsigned DEFAULT NULL,\n `payment_method` varchar(100) DEFAULT NULL,\n `payment_method_title` text,\n `transaction_id` varchar(100) DEFAULT NULL,\n `ip_address` varchar(100) DEFAULT NULL,\n `user_agent` text,\n `customer_note` text,\n\n PRIMARY KEY (`id`),\n KEY `status` (`status`),\n KEY `date_created` (`date_created_gmt`),\n KEY `customer_id_billing_email` (`customer_id`, `billing_email`(100)),\n KEY `billing_email` (`billing_email`(100)),\n KEY `type_status_date` (`type`, `status`, `date_created_gmt`),\n KEY `parent_order_id` (`parent_order_id`),\n KEY `date_updated` (`date_updated_gmt`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\nSloupec<\/th> Typ<\/th> Popis<\/th><\/tr><\/thead> id<\/code><\/td>bigint<\/td> Prim\u00e1rn\u00ed kl\u00ed\u010d objedn\u00e1vky<\/td><\/tr> status<\/code><\/td>varchar(20)<\/td> Stav objedn\u00e1vky ( wc-pending<\/code>, wc-processing<\/code>, wc-completed<\/code>, atd.)<\/td><\/tr>currency<\/code><\/td>varchar(10)<\/td> M\u011bna (CZK, USD, EUR…)<\/td><\/tr> type<\/code><\/td>varchar(20)<\/td> Typ ( shop_order<\/code>, shop_order_refund<\/code>, shop_subscription<\/code>…)<\/td><\/tr>tax_amount<\/code><\/td>decimal(26,8)<\/td> Celkov\u00e1 DPH \u010d\u00e1stka<\/td><\/tr> total_amount<\/code><\/td>decimal(26,8)<\/td> Celkov\u00e1 \u010d\u00e1stka objedn\u00e1vky<\/td><\/tr> customer_id<\/code><\/td>bigint<\/td> ID z\u00e1kazn\u00edka (NULL pro hosty)<\/td><\/tr> billing_email<\/code><\/td>varchar(320)<\/td> Faktura\u010dn\u00ed email<\/td><\/tr> date_created_gmt<\/code><\/td>datetime<\/td> Datum vytvo\u0159en\u00ed (GMT)<\/td><\/tr> date_updated_gmt<\/code><\/td>datetime<\/td> Datum posledn\u00ed aktualizace (GMT)<\/td><\/tr> parent_order_id<\/code><\/td>bigint<\/td> Parent objedn\u00e1vka (pro refundy)<\/td><\/tr> payment_method<\/code><\/td>varchar(100)<\/td> ID platebn\u00ed metody<\/td><\/tr> payment_method_title<\/code><\/td>text<\/td> N\u00e1zev platebn\u00ed metody<\/td><\/tr> transaction_id<\/code><\/td>varchar(100)<\/td> ID transakce z platebn\u00ed br\u00e1ny<\/td><\/tr> ip_address<\/code><\/td>varchar(100)<\/td> IP adresa z\u00e1kazn\u00edka<\/td><\/tr> user_agent<\/code><\/td>text<\/td> Prohl\u00ed\u017ee\u010d z\u00e1kazn\u00edka<\/td><\/tr> customer_note<\/code><\/td>text<\/td> Pozn\u00e1mka z\u00e1kazn\u00edka k objedn\u00e1vce<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n src\/Internal\/DataStores\/Orders\/OrdersTableDataStore.php:3137-3232<\/code><\/p>\n\n\n\n
\n\n\n\n2.2
wp_wc_order_addresses<\/code> – Faktura\u010dn\u00ed a dodac\u00ed adresy<\/h3>\n\n\n\nCREATE TABLE `wp_wc_order_addresses` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `order_id` bigint(20) unsigned NOT NULL,\n `address_type` varchar(20) DEFAULT NULL,\n `first_name` text,\n `last_name` text,\n `company` text,\n `address_1` text,\n `address_2` text,\n `city` text,\n `state` text,\n `postcode` text,\n `country` text,\n `email` varchar(320) DEFAULT NULL,\n `phone` varchar(100) DEFAULT NULL,\n\n PRIMARY KEY (`id`),\n KEY `order_id` (`order_id`),\n UNIQUE KEY `address_type_order_id` (`address_type`, `order_id`),\n KEY `email` (`email`(100)),\n KEY `phone` (`phone`(20))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\nSloupec<\/th> Typ<\/th> Popis<\/th><\/tr><\/thead> id<\/code><\/td>bigint<\/td> Prim\u00e1rn\u00ed kl\u00ed\u010d z\u00e1znamu adresy<\/td><\/tr> order_id<\/code><\/td>bigint<\/td> FK na wp_wc_orders.id<\/code><\/td><\/tr>address_type<\/code><\/td>varchar(20)<\/td> 'billing'<\/code> nebo 'shipping'<\/code><\/td><\/tr>first_name<\/code><\/td>text<\/td> Jm\u00e9no<\/td><\/tr> last_name<\/code><\/td>text<\/td> P\u0159\u00edjmen\u00ed<\/td><\/tr> company<\/code><\/td>text<\/td> N\u00e1zev firmy<\/td><\/tr> address_1<\/code><\/td>text<\/td> Ulice a \u010d\u00edslo popisn\u00e9<\/td><\/tr> address_2<\/code><\/td>text<\/td> Dal\u0161\u00ed adresn\u00ed \u00fadaje<\/td><\/tr> city<\/code><\/td>text<\/td> M\u011bsto<\/td><\/tr> state<\/code><\/td>text<\/td> Kraj\/st\u00e1t<\/td><\/tr> postcode<\/code><\/td>text<\/td> PS\u010c<\/td><\/tr> country<\/code><\/td>text<\/td> Zem\u011b (2-p\u00edsmenn\u00fd k\u00f3d)<\/td><\/tr> email<\/code><\/td>varchar(320)<\/td> Email (pro billing = faktura\u010dn\u00ed, shipping m\u016f\u017ee b\u00fdt jin\u00fd)<\/td><\/tr> phone<\/code><\/td>varchar(100)<\/td> Telefon<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n \n
address_type_order_id<\/code> zaji\u0161\u0165uje unik\u00e1tnost<\/li>\n\n\n\n
\n\n\n\n2.3
wp_wc_order_operational_data<\/code> – Opera\u010dn\u00ed data<\/h3>\n\n\n\nCREATE TABLE `wp_wc_order_operational_data` (\n `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n `order_id` bigint(20) unsigned NOT NULL,\n `created_via` varchar(100) DEFAULT NULL,\n `woocommerce_version` varchar(20) DEFAULT NULL,\n `prices_include_tax` tinyint(1) DEFAULT 0,\n `coupon_usages_are_counted` tinyint(1) DEFAULT 0,\n `download_permission_granted` tinyint(1) DEFAULT 0,\n `cart_hash` varchar(100) DEFAULT NULL,\n `new_order_email_sent` tinyint(1) DEFAULT 0,\n `order_key` varchar(100) DEFAULT NULL,\n `order_stock_reduced` tinyint(1) DEFAULT 0,\n `date_paid_gmt` datetime DEFAULT NULL,\n `date_completed_gmt` datetime DEFAULT NULL,\n `shipping_tax_amount` decimal(26,8) DEFAULT 0,\n `shipping_total_amount` decimal(26,8) DEFAULT 0,\n `discount_tax_amount` decimal(26,8) DEFAULT 0,\n `discount_total_amount` decimal(26,8) DEFAULT 0,\n `recorded_sales` tinyint(1) DEFAULT 0,\n\n PRIMARY KEY (`id`),\n UNIQUE KEY `order_id` (`order_id`),\n KEY `order_key` (`order_key`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\nSloupec<\/th> Typ<\/th> Popis<\/th><\/tr><\/thead> order_id<\/code><\/td>bigint<\/td> FK na wp_wc_orders.id<\/code> (UNIQUE)<\/td><\/tr>created_via<\/code><\/td>varchar(100)<\/td> Zdroj vytvo\u0159en\u00ed ( checkout<\/code>, admin<\/code>, rest-api<\/code>, store-api<\/code>…)<\/td><\/tr>woocommerce_version<\/code><\/td>varchar(20)<\/td> Verze WC p\u0159i vytvo\u0159en\u00ed<\/td><\/tr> prices_include_tax<\/code><\/td>tinyint(1)<\/td> Obsahuj\u00ed ceny DPH?<\/td><\/tr> coupon_usages_are_counted<\/code><\/td>tinyint(1)<\/td> Byly zapo\u010d\u00edt\u00e1ny pou\u017eit\u00ed kupon\u016f?<\/td><\/tr> download_permission_granted<\/code><\/td>tinyint(1)<\/td> Byla ud\u011blena pr\u00e1va ke sta\u017een\u00ed?<\/td><\/tr> cart_hash<\/code><\/td>varchar(100)<\/td> Hash p\u016fvodn\u00edho ko\u0161\u00edku<\/td><\/tr> new_order_email_sent<\/code><\/td>tinyint(1)<\/td> Byl odesl\u00e1n email o nov\u00e9 objedn\u00e1vce?<\/td><\/tr> order_key<\/code><\/td>varchar(100)<\/td> Unik\u00e1tn\u00ed kl\u00ed\u010d pro autentizaci (nap\u0159. pro Pay\/View bez p\u0159ihl\u00e1\u0161en\u00ed)<\/td><\/tr> order_stock_reduced<\/code><\/td>tinyint(1)<\/td> Byl sn\u00ed\u017een sklad?<\/td><\/tr> date_paid_gmt<\/code><\/td>datetime<\/td> Datum zaplacen\u00ed<\/td><\/tr>