{"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

WooCommerce HPOS – High-Performance Order Storage<\/h1>\n\n\n\n

Obsah<\/h2>\n\n\n\n
    \n
  1. \u00davod do HPOS<\/a><\/li>\n\n\n\n
  2. HPOS Datab\u00e1zov\u00e9 tabulky<\/a><\/li>\n\n\n\n
  3. Product Lookup tabulky<\/a><\/li>\n\n\n\n
  4. Dal\u0161\u00ed custom WooCommerce tabulky<\/a><\/li>\n\n\n\n
  5. Srovn\u00e1n\u00ed s p\u016fvodn\u00edm ukl\u00e1d\u00e1n\u00edm<\/a><\/li>\n\n\n\n
  6. M\u00f3d kompatibility<\/a><\/li>\n\n\n\n
  7. Data neukl\u00e1dan\u00e1 do defaultn\u00edch tabulek<\/a><\/li>\n\n\n\n
  8. Kl\u00ed\u010dov\u00e9 PHP t\u0159\u00eddy<\/a><\/li>\n\n\n\n
  9. Konfigurace a nastaven\u00ed<\/a><\/li>\n\n\n\n
  10. Migrace na HPOS<\/a><\/li>\n\n\n\n
  11. V\u00fdkonnostn\u00ed charakteristiky<\/a><\/li>\n<\/ol>\n\n\n\n
    \n\n\n\n

    1. \u00davod do HPOS<\/h2>\n\n\n\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

    1.1 Pro\u010d HPOS?<\/h3>\n\n\n\n

    Probl\u00e9my p\u016fvodn\u00edho syst\u00e9mu:<\/strong><\/p>\n\n\n\n

      \n
    • Objedn\u00e1vky ukl\u00e1d\u00e1ny jako posty (wp_posts<\/code>, post_type = 'shop_order'<\/code>)<\/li>\n\n\n\n
    • V\u0161echna data v wp_postmeta<\/code> (billing, shipping, platby…)<\/li>\n\n\n\n
    • Pomal\u00e9 dotazy kv\u016fli nutnosti JOIN\u016f p\u0159es meta tabulky<\/li>\n\n\n\n
    • Neefektivn\u00ed indexov\u00e1n\u00ed<\/li>\n\n\n\n
    • Velk\u00e1 velikost datab\u00e1ze<\/li>\n<\/ul>\n\n\n\n

      V\u00fdhody HPOS:<\/strong><\/p>\n\n\n\n

        \n
      • 70-90% rychlej\u0161\u00ed dotazy<\/strong> na objedn\u00e1vky<\/li>\n\n\n\n
      • 40% men\u0161\u00ed velikost<\/strong> datab\u00e1ze<\/li>\n\n\n\n
      • Lep\u0161\u00ed indexov\u00e1n\u00ed<\/strong> – dedikovan\u00e9 sloupce pro \u010dasto dotazovan\u00e1 data<\/li>\n\n\n\n
      • Normalizovan\u00e1 struktura<\/strong> – odd\u011blen\u00e9 tabulky pro adresy, metadata, opera\u010dn\u00ed data<\/li>\n\n\n\n
      • P\u0159\u00edm\u00fd p\u0159\u00edstup ke sloupc\u016fm<\/strong> – bez nutnosti meta JOIN\u016f<\/li>\n<\/ul>\n\n\n\n

        1.2 Souborov\u00e1 struktura v k\u00f3du<\/h3>\n\n\n\n

        Hlavn\u00ed implementa\u010dn\u00ed soubory:<\/strong><\/p>\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\n

        2. HPOS Datab\u00e1zov\u00e9 tabulky<\/h2>\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

        2.1 wp_wc_orders<\/code> – Hlavn\u00ed tabulka objedn\u00e1vek<\/h3>\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

        CREATE 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\n

        Popis kl\u00ed\u010dov\u00fdch sloupc\u016f:<\/strong><\/p>\n\n\n\n

        Sloupec<\/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

        Implementace:<\/strong> src\/Internal\/DataStores\/Orders\/OrdersTableDataStore.php:3137-3232<\/code><\/p>\n\n\n\n


        \n\n\n\n

        2.2 wp_wc_order_addresses<\/code> – Faktura\u010dn\u00ed a dodac\u00ed adresy<\/h3>\n\n\n\n

        \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

        CREATE 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\n

        Popis:<\/strong><\/p>\n\n\n\n

        Sloupec<\/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

        D\u016fle\u017eit\u00e9:<\/strong><\/p>\n\n\n\n

          \n
        • Ka\u017ed\u00e1 objedn\u00e1vka m\u00e1 max 2 z\u00e1znamy<\/strong> (1\u00d7 billing, 1\u00d7 shipping)<\/li>\n\n\n\n
        • UNIQUE KEY address_type_order_id<\/code> zaji\u0161\u0165uje unik\u00e1tnost<\/li>\n\n\n\n
        • Mo\u017enost Full Text Search<\/strong> indexu (voliteln\u00e9)<\/li>\n<\/ul>\n\n\n\n
          \n\n\n\n

          2.3 wp_wc_order_operational_data<\/code> – Opera\u010dn\u00ed data<\/h3>\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

          CREATE 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\n

          Popis:<\/strong><\/p>\n\n\n\n

          Sloupec<\/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>
          date_completed_gmt<\/code><\/td>datetime<\/td>Datum dokon\u010den\u00ed<\/td><\/tr>
          shipping_tax_amount<\/code><\/td>decimal(26,8)<\/td>DPH z dopravy<\/td><\/tr>
          shipping_total_amount<\/code><\/td>decimal(26,8)<\/td>Celkov\u00e1 cena dopravy<\/td><\/tr>
          discount_tax_amount<\/code><\/td>decimal(26,8)<\/td>DPH ze slev<\/td><\/tr>
          discount_total_amount<\/code><\/td>decimal(26,8)<\/td>Celkov\u00e1 sleva<\/td><\/tr>
          recorded_sales<\/code><\/td>tinyint(1)<\/td>Byly zaznamen\u00e1ny tr\u017eby?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

          D\u016fle\u017eit\u00e9:<\/strong><\/p>\n\n\n\n

            \n
          • 1 z\u00e1znam na objedn\u00e1vku<\/strong> (UNIQUE KEY na order_id<\/code>)<\/li>\n\n\n\n
          • P\u0159ev\u00e1\u017en\u011b boolean flagy pro WooCommerce intern\u00ed logiku<\/li>\n<\/ul>\n\n\n\n
            \n\n\n\n

            2.4 wp_wc_orders_meta<\/code> – Metadata objedn\u00e1vek<\/h3>\n\n\n\n

            \u00da\u010del:<\/strong> Flexibiln\u00ed key-value storage pro dodate\u010dn\u00e1 data<\/p>\n\n\n\n

            Struktura:<\/strong><\/p>\n\n\n\n

            CREATE TABLE `wp_wc_orders_meta` (\n  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `order_id` bigint(20) unsigned NOT NULL,\n  `meta_key` varchar(255) DEFAULT NULL,\n  `meta_value` text,\n\n  PRIMARY KEY (`id`),\n  KEY `meta_key_value` (`meta_key`, `meta_value`(100)),\n  KEY `order_id_meta_key_meta_value` (`order_id`, `meta_key`, `meta_value`(100))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

            Popis:<\/strong><\/p>\n\n\n\n

            Sloupec<\/th>Typ<\/th>Popis<\/th><\/tr><\/thead>
            id<\/code><\/td>bigint<\/td>Prim\u00e1rn\u00ed kl\u00ed\u010d meta z\u00e1znamu<\/td><\/tr>
            order_id<\/code><\/td>bigint<\/td>FK na wp_wc_orders.id<\/code><\/td><\/tr>
            meta_key<\/code><\/td>varchar(255)<\/td>N\u00e1zev meta kl\u00ed\u010de<\/td><\/tr>
            meta_value<\/code><\/td>text<\/td>Hodnota (m\u016f\u017ee b\u00fdt serializovan\u00e1)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

            Typick\u00e1 metadata:<\/strong><\/p>\n\n\n\n

            _customer_user              \u2192 ID registrovan\u00e9ho z\u00e1kazn\u00edka\n_order_currency            \u2192 M\u011bna objedn\u00e1vky\n_billing_*, _shipping_*    \u2192 Duplikovan\u00e1 adresn\u00ed data (pro kompatibilitu)\n_payment_method            \u2192 ID platebn\u00ed metody\n_payment_method_title      \u2192 N\u00e1zev platebn\u00ed metody\n_order_key                 \u2192 Unik\u00e1tn\u00ed kl\u00ed\u010d objedn\u00e1vky\n_order_total               \u2192 Celkov\u00e1 \u010d\u00e1stka\n_order_tax                 \u2192 Celkov\u00e1 DPH\n_order_shipping            \u2192 Cena dopravy\n_cart_discount             \u2192 Sleva z ko\u0161\u00edku\n_transaction_id            \u2192 ID transakce\n_customer_ip_address       \u2192 IP adresa z\u00e1kazn\u00edka\n_customer_user_agent       \u2192 User agent\n_created_via               \u2192 Zp\u016fsob vytvo\u0159en\u00ed\n_prices_include_tax        \u2192 Obsahuj\u00ed ceny DPH\n_date_completed            \u2192 Timestamp dokon\u010den\u00ed\n_date_paid                 \u2192 Timestamp zaplacen\u00ed\n_recorded_sales            \u2192 Flag zaznamen\u00e1n\u00ed tr\u017eeb<\/code><\/pre>\n\n\n\n

            D\u016fle\u017eit\u00e9:<\/strong><\/p>\n\n\n\n

              \n
            • Neomezen\u00fd po\u010det<\/strong> metadat na objedn\u00e1vku<\/li>\n\n\n\n
            • Identick\u00e1 struktura jako wp_postmeta<\/code><\/li>\n\n\n\n
            • Data z „internal_meta_keys“ jsou ukl\u00e1d\u00e1na do dedikovan\u00fdch sloupc\u016f v ostatn\u00edch tabulk\u00e1ch<\/li>\n<\/ul>\n\n\n\n
              \n\n\n\n

              3. Product Lookup tabulky<\/h2>\n\n\n\n

              WooCommerce pou\u017e\u00edv\u00e1 denormalizovan\u00e9 lookup tabulky<\/strong> pro rychl\u00e9 dotazy na produkty a analytics.<\/p>\n\n\n\n

              3.1 wp_wc_product_meta_lookup<\/code> – Rychl\u00fd p\u0159\u00edstup k produkt\u016fm<\/h3>\n\n\n\n

              \u00da\u010del:<\/strong> Denormalizovan\u00e1 data pro filtrov\u00e1n\u00ed a vyhled\u00e1v\u00e1n\u00ed produkt\u016f<\/p>\n\n\n\n

              Struktura:<\/strong><\/p>\n\n\n\n

              CREATE TABLE `wp_wc_product_meta_lookup` (\n  `product_id` bigint(20) NOT NULL,\n  `sku` varchar(100) DEFAULT NULL,\n  `global_unique_id` varchar(100) DEFAULT NULL,\n  `virtual` tinyint(1) DEFAULT 0,\n  `downloadable` tinyint(1) DEFAULT 0,\n  `min_price` decimal(19,4) DEFAULT NULL,\n  `max_price` decimal(19,4) DEFAULT NULL,\n  `onsale` tinyint(1) DEFAULT 0,\n  `stock_quantity` double DEFAULT NULL,\n  `stock_status` varchar(100) DEFAULT 'instock',\n  `rating_count` bigint(20) DEFAULT 0,\n  `average_rating` decimal(3,2) DEFAULT 0.00,\n  `total_sales` bigint(20) DEFAULT 0,\n  `tax_status` varchar(100) DEFAULT 'taxable',\n  `tax_class` varchar(100) DEFAULT NULL,\n\n  PRIMARY KEY (`product_id`),\n  KEY `sku` (`sku`),\n  KEY `virtual` (`virtual`),\n  KEY `downloadable` (`downloadable`),\n  KEY `stock_status` (`stock_status`),\n  KEY `stock_quantity` (`stock_quantity`),\n  KEY `onsale` (`onsale`),\n  KEY `min_max_price` (`min_price`, `max_price`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

              Popis:<\/strong><\/p>\n\n\n\n

              Sloupec<\/th>Typ<\/th>Popis<\/th><\/tr><\/thead>
              product_id<\/code><\/td>bigint<\/td>PK, FK na wp_posts.ID<\/code> (post_type=’product‘)<\/td><\/tr>
              sku<\/code><\/td>varchar(100)<\/td>SKU produktu<\/td><\/tr>
              global_unique_id<\/code><\/td>varchar(100)<\/td>Glob\u00e1ln\u00ed ID (nap\u0159. GTIN, ISBN)<\/td><\/tr>
              virtual<\/code><\/td>tinyint(1)<\/td>Je virtu\u00e1ln\u00ed produkt?<\/td><\/tr>
              downloadable<\/code><\/td>tinyint(1)<\/td>Je ke sta\u017een\u00ed?<\/td><\/tr>
              min_price<\/code><\/td>decimal(19,4)<\/td>Minim\u00e1ln\u00ed cena (pro variace)<\/td><\/tr>
              max_price<\/code><\/td>decimal(19,4)<\/td>Maxim\u00e1ln\u00ed cena<\/td><\/tr>
              onsale<\/code><\/td>tinyint(1)<\/td>Je ve v\u00fdprodeji?<\/td><\/tr>
              stock_quantity<\/code><\/td>double<\/td>Mno\u017estv\u00ed na sklad\u011b<\/td><\/tr>
              stock_status<\/code><\/td>varchar(100)<\/td>Stav skladu (instock<\/code>, outofstock<\/code>, onbackorder<\/code>)<\/td><\/tr>
              rating_count<\/code><\/td>bigint<\/td>Po\u010det hodnocen\u00ed<\/td><\/tr>
              average_rating<\/code><\/td>decimal(3,2)<\/td>Pr\u016fm\u011brn\u00e9 hodnocen\u00ed (0.00-5.00)<\/td><\/tr>
              total_sales<\/code><\/td>bigint<\/td>Celkov\u00fd po\u010det prodej\u016f<\/td><\/tr>
              tax_status<\/code><\/td>varchar(100)<\/td>DPH stav (taxable<\/code>, shipping<\/code>, none<\/code>)<\/td><\/tr>
              tax_class<\/code><\/td>varchar(100)<\/td>DPH t\u0159\u00edda<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

              Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                \n
              • Filtrov\u00e1n\u00ed produkt\u016f v adminu<\/li>\n\n\n\n
              • Frontendov\u00e9 vyhled\u00e1v\u00e1n\u00ed a \u0159azen\u00ed<\/li>\n\n\n\n
              • Kontrola skladov\u00e9 dostupnosti<\/li>\n\n\n\n
              • V\u00fdprodejov\u00e9 str\u00e1nky<\/li>\n<\/ul>\n\n\n\n

                Aktualizace:<\/strong> Automaticky p\u0159i zm\u011bn\u011b produktu<\/p>\n\n\n\n

                Implementace:<\/strong> includes\/class-wc-install.php:1891-1915<\/code><\/p>\n\n\n\n


                \n\n\n\n

                3.2 wp_wc_order_stats<\/code> – Statistiky objedn\u00e1vek<\/h3>\n\n\n\n

                \u00da\u010del:<\/strong> Denormalizovan\u00e1 data pro reporting a analytics<\/p>\n\n\n\n

                Struktura:<\/strong><\/p>\n\n\n\n

                CREATE TABLE `wp_wc_order_stats` (\n  `order_id` bigint(20) unsigned NOT NULL,\n  `parent_id` bigint(20) unsigned DEFAULT 0,\n  `date_created` datetime DEFAULT NULL,\n  `date_created_gmt` datetime DEFAULT NULL,\n  `date_paid` datetime DEFAULT NULL,\n  `date_completed` datetime DEFAULT NULL,\n  `num_items_sold` int(11) DEFAULT 0,\n  `total_sales` double DEFAULT 0,\n  `tax_total` double DEFAULT 0,\n  `shipping_total` double DEFAULT 0,\n  `net_total` double DEFAULT 0,\n  `returning_customer` tinyint(1) DEFAULT 0,\n  `status` varchar(200) DEFAULT NULL,\n  `customer_id` bigint(20) unsigned DEFAULT 0,\n\n  PRIMARY KEY (`order_id`),\n  KEY `date_created` (`date_created`),\n  KEY `customer_id` (`customer_id`),\n  KEY `status` (`status`(100))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                Popis:<\/strong><\/p>\n\n\n\n

                Sloupec<\/th>Typ<\/th>Popis<\/th><\/tr><\/thead>
                order_id<\/code><\/td>bigint<\/td>PK, FK na objedn\u00e1vku<\/td><\/tr>
                parent_id<\/code><\/td>bigint<\/td>Parent objedn\u00e1vka (pro refundy)<\/td><\/tr>
                date_created<\/code><\/td>datetime<\/td>Datum vytvo\u0159en\u00ed (local timezone)<\/td><\/tr>
                date_created_gmt<\/code><\/td>datetime<\/td>Datum vytvo\u0159en\u00ed (GMT)<\/td><\/tr>
                date_paid<\/code><\/td>datetime<\/td>Datum zaplacen\u00ed<\/td><\/tr>
                date_completed<\/code><\/td>datetime<\/td>Datum dokon\u010den\u00ed<\/td><\/tr>
                num_items_sold<\/code><\/td>int<\/td>Celkov\u00fd po\u010det polo\u017eek<\/td><\/tr>
                total_sales<\/code><\/td>double<\/td>Celkov\u00e9 tr\u017eby<\/td><\/tr>
                tax_total<\/code><\/td>double<\/td>Celkov\u00e1 DPH<\/td><\/tr>
                shipping_total<\/code><\/td>double<\/td>Celkov\u00e1 doprava<\/td><\/tr>
                net_total<\/code><\/td>double<\/td>\u010cist\u00fd p\u0159\u00edjem (po refundech)<\/td><\/tr>
                returning_customer<\/code><\/td>tinyint(1)<\/td>Je opakuj\u00edc\u00ed se z\u00e1kazn\u00edk?<\/td><\/tr>
                status<\/code><\/td>varchar(200)<\/td>Stav objedn\u00e1vky<\/td><\/tr>
                customer_id<\/code><\/td>bigint<\/td>ID z\u00e1kazn\u00edka<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

                Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                  \n
                • WooCommerce Analytics (Admin > Analytics)<\/li>\n\n\n\n
                • Reporting tr\u017eeb<\/li>\n\n\n\n
                • Customer lifetime value<\/li>\n\n\n\n
                • Grafy a dashboardy<\/li>\n<\/ul>\n\n\n\n
                  \n\n\n\n

                  3.3 wp_wc_order_product_lookup<\/code> – Polo\u017eky objedn\u00e1vek (analytics)<\/h3>\n\n\n\n

                  \u00da\u010del:<\/strong> Denormalizovan\u00e9 \u0159\u00e1dkov\u00e9 polo\u017eky pro rychl\u00e9 reporty<\/p>\n\n\n\n

                  Struktura:<\/strong><\/p>\n\n\n\n

                  CREATE TABLE `wp_wc_order_product_lookup` (\n  `order_item_id` bigint(20) unsigned NOT NULL,\n  `order_id` bigint(20) unsigned NOT NULL,\n  `product_id` bigint(20) unsigned NOT NULL,\n  `variation_id` bigint(20) unsigned DEFAULT 0,\n  `customer_id` bigint(20) unsigned DEFAULT NULL,\n  `date_created` datetime DEFAULT NULL,\n  `product_qty` int(11) NOT NULL,\n  `product_net_revenue` double DEFAULT 0,\n  `product_gross_revenue` double DEFAULT 0,\n  `coupon_amount` double DEFAULT 0,\n  `tax_amount` double DEFAULT 0,\n  `shipping_amount` double DEFAULT 0,\n  `shipping_tax_amount` double DEFAULT 0,\n\n  PRIMARY KEY (`order_item_id`),\n  KEY `order_id` (`order_id`),\n  KEY `product_id` (`product_id`),\n  KEY `customer_id` (`customer_id`),\n  KEY `date_created` (`date_created`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                  Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                    \n
                  • Top produkty reporty<\/li>\n\n\n\n
                  • Tr\u017eby podle produktu<\/li>\n\n\n\n
                  • Anal\u00fdza kupn\u00edch vzorc\u016f<\/li>\n<\/ul>\n\n\n\n
                    \n\n\n\n

                    3.4 wp_wc_order_tax_lookup<\/code> – DPH analytics<\/h3>\n\n\n\n

                    Struktura:<\/strong><\/p>\n\n\n\n

                    CREATE TABLE `wp_wc_order_tax_lookup` (\n  `order_id` bigint(20) unsigned NOT NULL,\n  `tax_rate_id` bigint(20) unsigned NOT NULL,\n  `date_created` datetime DEFAULT NULL,\n  `shipping_tax` double DEFAULT 0,\n  `order_tax` double DEFAULT 0,\n  `total_tax` double DEFAULT 0,\n\n  PRIMARY KEY (`order_id`, `tax_rate_id`),\n  KEY `tax_rate_id` (`tax_rate_id`),\n  KEY `date_created` (`date_created`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                    Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                      \n
                    • DPH reporty podle sazeb<\/li>\n\n\n\n
                    • Kontrola spr\u00e1vnosti DPH v\u00fdpo\u010dt\u016f<\/li>\n<\/ul>\n\n\n\n
                      \n\n\n\n

                      3.5 wp_wc_order_coupon_lookup<\/code> – Kupon analytics<\/h3>\n\n\n\n

                      Struktura:<\/strong><\/p>\n\n\n\n

                      CREATE TABLE `wp_wc_order_coupon_lookup` (\n  `order_id` bigint(20) unsigned NOT NULL,\n  `coupon_id` bigint(20) unsigned NOT NULL,\n  `date_created` datetime DEFAULT NULL,\n  `discount_amount` double DEFAULT 0,\n\n  PRIMARY KEY (`order_id`, `coupon_id`),\n  KEY `coupon_id` (`coupon_id`),\n  KEY `date_created` (`date_created`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                      Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                        \n
                      • Anal\u00fdza efektivity kupon\u016f<\/li>\n\n\n\n
                      • Nejpou\u017e\u00edvan\u011bj\u0161\u00ed kupony<\/li>\n<\/ul>\n\n\n\n
                        \n\n\n\n

                        4. Dal\u0161\u00ed custom WooCommerce tabulky<\/h2>\n\n\n\n

                        4.1 wp_woocommerce_sessions<\/code> – Session management<\/h3>\n\n\n\n

                        \u00da\u010del:<\/strong> Ukl\u00e1d\u00e1n\u00ed session dat pro z\u00e1kazn\u00edky (ko\u0161\u00edk, checkout data)<\/p>\n\n\n\n

                        CREATE TABLE `wp_woocommerce_sessions` (\n  `session_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `session_key` char(32) NOT NULL,\n  `session_value` longtext NOT NULL,\n  `session_expiry` bigint(20) unsigned NOT NULL,\n\n  PRIMARY KEY (`session_id`),\n  UNIQUE KEY `session_key` (`session_key`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                        4.2 wp_woocommerce_api_keys<\/code> – REST API kl\u00ed\u010de<\/h3>\n\n\n\n

                        \u00da\u010del:<\/strong> Autentizace pro WooCommerce REST API<\/p>\n\n\n\n

                        CREATE TABLE `wp_woocommerce_api_keys` (\n  `key_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `user_id` bigint(20) unsigned NOT NULL,\n  `description` varchar(200) DEFAULT NULL,\n  `permissions` varchar(10) NOT NULL,\n  `consumer_key` char(64) NOT NULL,\n  `consumer_secret` char(43) NOT NULL,\n  `nonces` longtext,\n  `truncated_key` char(7) NOT NULL,\n  `last_access` datetime DEFAULT NULL,\n\n  PRIMARY KEY (`key_id`),\n  KEY `consumer_key` (`consumer_key`),\n  KEY `consumer_secret` (`consumer_secret`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                        4.3 wp_woocommerce_payment_tokens<\/code> – Ulo\u017een\u00e9 platebn\u00ed metody<\/h3>\n\n\n\n

                        \u00da\u010del:<\/strong> Tokeny pro opakovan\u00e9 platby (saved cards)<\/p>\n\n\n\n

                        CREATE TABLE `wp_woocommerce_payment_tokens` (\n  `token_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `gateway_id` varchar(200) NOT NULL,\n  `token` text NOT NULL,\n  `user_id` bigint(20) unsigned NOT NULL,\n  `type` varchar(200) NOT NULL,\n  `is_default` tinyint(1) NOT NULL DEFAULT 0,\n\n  PRIMARY KEY (`token_id`),\n  KEY `user_id` (`user_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                        4.4 wp_woocommerce_log<\/code> – Syst\u00e9mov\u00e9 logy<\/h3>\n\n\n\n

                        \u00da\u010del:<\/strong> WooCommerce logging (chyby, debug info)<\/p>\n\n\n\n

                        CREATE TABLE `wp_woocommerce_log` (\n  `log_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `timestamp` datetime NOT NULL,\n  `level` smallint(4) NOT NULL,\n  `source` varchar(200) NOT NULL,\n  `message` longtext NOT NULL,\n  `context` longtext,\n\n  PRIMARY KEY (`log_id`),\n  KEY `level` (`level`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                        4.5 wp_woocommerce_order_items<\/code> – Polo\u017eky objedn\u00e1vek<\/h3>\n\n\n\n

                        \u00da\u010del:<\/strong> Line items objedn\u00e1vek (produkty, doprava, poplatky)<\/p>\n\n\n\n

                        CREATE TABLE `wp_woocommerce_order_items` (\n  `order_item_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `order_item_name` text NOT NULL,\n  `order_item_type` varchar(200) NOT NULL,\n  `order_id` bigint(20) unsigned NOT NULL,\n\n  PRIMARY KEY (`order_item_id`),\n  KEY `order_id` (`order_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                        Typy polo\u017eek:<\/strong><\/p>\n\n\n\n

                          \n
                        • line_item<\/code> – produkt<\/li>\n\n\n\n
                        • shipping<\/code> – doprava<\/li>\n\n\n\n
                        • tax<\/code> – DPH sazba<\/li>\n\n\n\n
                        • fee<\/code> – poplatek<\/li>\n\n\n\n
                        • coupon<\/code> – kupon<\/li>\n<\/ul>\n\n\n\n

                          4.6 wp_woocommerce_order_itemmeta<\/code> – Metadata polo\u017eek<\/h3>\n\n\n\n

                          \u00da\u010del:<\/strong> Metadata pro order items<\/p>\n\n\n\n

                          CREATE TABLE `wp_woocommerce_order_itemmeta` (\n  `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `order_item_id` bigint(20) unsigned NOT NULL,\n  `meta_key` varchar(255) DEFAULT NULL,\n  `meta_value` longtext,\n\n  PRIMARY KEY (`meta_id`),\n  KEY `order_item_id` (`order_item_id`),\n  KEY `meta_key` (`meta_key`(32))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.7 wp_woocommerce_tax_rates<\/code> – DPH sazby<\/h3>\n\n\n\n

                          \u00da\u010del:<\/strong> Definice DPH sazeb podle lokac\u00ed<\/p>\n\n\n\n

                          CREATE TABLE `wp_woocommerce_tax_rates` (\n  `tax_rate_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `tax_rate_country` varchar(2) DEFAULT NULL,\n  `tax_rate_state` varchar(200) DEFAULT NULL,\n  `tax_rate` varchar(8) DEFAULT NULL,\n  `tax_rate_name` varchar(200) DEFAULT NULL,\n  `tax_rate_priority` bigint(20) unsigned DEFAULT NULL,\n  `tax_rate_compound` int(1) DEFAULT 0,\n  `tax_rate_shipping` int(1) DEFAULT 1,\n  `tax_rate_order` bigint(20) unsigned DEFAULT NULL,\n  `tax_rate_class` varchar(200) DEFAULT NULL,\n\n  PRIMARY KEY (`tax_rate_id`),\n  KEY `tax_rate_country` (`tax_rate_country`),\n  KEY `tax_rate_state` (`tax_rate_state`(2)),\n  KEY `tax_rate_class` (`tax_rate_class`(10)),\n  KEY `tax_rate_priority` (`tax_rate_priority`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.8 wp_woocommerce_tax_rate_locations<\/code> – Lokace pro DPH sazby<\/h3>\n\n\n\n
                          CREATE TABLE `wp_woocommerce_tax_rate_locations` (\n  `location_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `location_code` varchar(200) DEFAULT NULL,\n  `tax_rate_id` bigint(20) unsigned DEFAULT NULL,\n  `location_type` varchar(40) DEFAULT NULL,\n\n  PRIMARY KEY (`location_id`),\n  KEY `tax_rate_id` (`tax_rate_id`),\n  KEY `location_type_code` (`location_type`(10), `location_code`(20))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.9 wp_woocommerce_shipping_zones<\/code> – Doru\u010dovac\u00ed z\u00f3ny<\/h3>\n\n\n\n
                          CREATE TABLE `wp_woocommerce_shipping_zones` (\n  `zone_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `zone_name` varchar(200) DEFAULT NULL,\n  `zone_order` bigint(20) unsigned DEFAULT NULL,\n\n  PRIMARY KEY (`zone_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.10 wp_woocommerce_shipping_zone_locations<\/code> – Lokace z\u00f3n<\/h3>\n\n\n\n
                          CREATE TABLE `wp_woocommerce_shipping_zone_locations` (\n  `location_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `zone_id` bigint(20) unsigned DEFAULT NULL,\n  `location_code` varchar(200) DEFAULT NULL,\n  `location_type` varchar(40) DEFAULT NULL,\n\n  PRIMARY KEY (`location_id`),\n  KEY `location_id` (`location_id`),\n  KEY `location_type_code` (`location_type`(10), `location_code`(20))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.11 wp_woocommerce_shipping_zone_methods<\/code> – Metody dopravy<\/h3>\n\n\n\n
                          CREATE TABLE `wp_woocommerce_shipping_zone_methods` (\n  `zone_id` bigint(20) unsigned NOT NULL,\n  `instance_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `method_id` varchar(200) NOT NULL,\n  `method_order` bigint(20) unsigned DEFAULT NULL,\n  `is_enabled` tinyint(1) DEFAULT 1,\n\n  PRIMARY KEY (`instance_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.12 wp_wc_webhooks<\/code> – Webhooks definice<\/h3>\n\n\n\n
                          CREATE TABLE `wp_wc_webhooks` (\n  `webhook_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `status` varchar(200) NOT NULL,\n  `name` text NOT NULL,\n  `user_id` bigint(20) unsigned NOT NULL,\n  `delivery_url` text NOT NULL,\n  `secret` text NOT NULL,\n  `topic` varchar(200) NOT NULL,\n  `date_created` datetime NOT NULL,\n  `date_created_gmt` datetime NOT NULL,\n  `date_modified` datetime NOT NULL,\n  `date_modified_gmt` datetime NOT NULL,\n  `api_version` smallint(4) NOT NULL,\n  `failure_count` smallint(10) NOT NULL DEFAULT 0,\n  `pending_delivery` tinyint(1) NOT NULL DEFAULT 0,\n\n  PRIMARY KEY (`webhook_id`),\n  KEY `user_id` (`user_id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.13 wp_wc_download_log<\/code> – Log ke sta\u017een\u00ed<\/h3>\n\n\n\n
                          CREATE TABLE `wp_wc_download_log` (\n  `download_log_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `timestamp` datetime NOT NULL,\n  `permission_id` bigint(20) unsigned NOT NULL,\n  `user_id` bigint(20) unsigned DEFAULT NULL,\n  `user_ip_address` varchar(100) DEFAULT NULL,\n\n  PRIMARY KEY (`download_log_id`),\n  KEY `permission_id` (`permission_id`),\n  KEY `timestamp` (`timestamp`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n

                          4.14 wp_wc_product_download_directories<\/code> – Adres\u00e1\u0159e ke sta\u017een\u00ed<\/h3>\n\n\n\n
                          CREATE TABLE `wp_wc_product_download_directories` (\n  `url_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n  `url` varchar(256) NOT NULL,\n  `enabled` tinyint(1) DEFAULT 0,\n\n  PRIMARY KEY (`url_id`),\n  KEY `url` (`url`(191))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;<\/code><\/pre>\n\n\n\n
                          \n\n\n\n

                          5. Srovn\u00e1n\u00ed s p\u016fvodn\u00edm ukl\u00e1d\u00e1n\u00edm<\/h2>\n\n\n\n

                          5.1 Legacy syst\u00e9m (p\u0159ed HPOS)<\/h3>\n\n\n\n

                          Z\u00e1kladn\u00ed princip:<\/strong><\/p>\n\n\n\n

                            \n
                          • Objedn\u00e1vky = WordPress posty (post_type = 'shop_order'<\/code>)<\/li>\n\n\n\n
                          • V\u0161echna data v wp_posts<\/code> a wp_postmeta<\/code><\/li>\n<\/ul>\n\n\n\n

                            Tabulkov\u00e1 struktura:<\/strong><\/p>\n\n\n\n

                            wp_posts\n ID (objedn\u00e1vka ID)\n post_type = 'shop_order'\n post_status = 'wc-completed', 'wc-processing', ...\n post_date (datum vytvo\u0159en\u00ed)\n post_title (nap\u0159. \"Objedn\u00e1vka #12345\")\n post_excerpt (customer note)\n post_author (v\u017edy 0 pro objedn\u00e1vky)\n\nwp_postmeta (v\u0161echna objedn\u00e1vkov\u00e1 data)\n _billing_first_name\n _billing_last_name\n _billing_address_1\n _billing_city\n ... (20+ billing metadat)\n _shipping_first_name\n ... (20+ shipping metadat)\n _order_total\n _order_tax\n _order_shipping\n _payment_method\n _transaction_id\n _customer_user\n _order_key\n ... (50+ dal\u0161\u00edch meta kl\u00ed\u010d\u016f)<\/code><\/pre>\n\n\n\n

                            P\u0159\u00edklad query:<\/strong><\/p>\n\n\n\n

                            -- Legacy: Z\u00edskat objedn\u00e1vky z\u00e1kazn\u00edka\nSELECT p.ID\nFROM wp_posts p\nINNER JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_customer_user'\nWHERE p.post_type = 'shop_order'\n  AND pm.meta_value = '123'\nORDER BY p.post_date DESC;\n\n-- Pot\u0159eba dal\u0161\u00edch JOIN\u016f pro ka\u017ed\u00e9 meta pole (email, total, status...)<\/code><\/pre>\n\n\n\n

                            5.2 HPOS syst\u00e9m (nov\u00fd)<\/h3>\n\n\n\n

                            Z\u00e1kladn\u00ed princip:<\/strong><\/p>\n\n\n\n

                              \n
                            • Objedn\u00e1vky = vlastn\u00ed tabulky<\/li>\n\n\n\n
                            • Normalizovan\u00e1 struktura<\/li>\n\n\n\n
                            • Dedikovan\u00e9 sloupce pro \u010dasto dotazovan\u00e1 data<\/li>\n<\/ul>\n\n\n\n

                              P\u0159\u00edklad query:<\/strong><\/p>\n\n\n\n

                              -- HPOS: Z\u00edskat objedn\u00e1vky z\u00e1kazn\u00edka\nSELECT id, billing_email, total_amount, status, date_created_gmt\nFROM wp_wc_orders\nWHERE customer_id = 123\nORDER BY date_created_gmt DESC;\n\n-- \u017d\u00e1dn\u00e9 JOINy, p\u0159\u00edm\u00fd p\u0159\u00edstup ke sloupc\u016fm<\/code><\/pre>\n\n\n\n

                              5.3 Srovn\u00e1vac\u00ed tabulka<\/h3>\n\n\n\n
                              Aspekt<\/th>Legacy (Posts)<\/th>HPOS<\/th>Rozd\u00edl<\/th><\/tr><\/thead>
                              Hlavn\u00ed tabulka<\/strong><\/td>wp_posts<\/code><\/td>wp_wc_orders<\/code><\/td>Dedikovan\u00e1 tabulka<\/td><\/tr>
                              Metadata<\/strong><\/td>wp_postmeta<\/code><\/td>wp_wc_orders_meta<\/code> + dedikovan\u00e9 sloupce<\/td>Men\u0161\u00ed objem JOIN\u016f<\/td><\/tr>
                              Adresy<\/strong><\/td>wp_postmeta<\/code> (40+ z\u00e1znam\u016f)<\/td>wp_wc_order_addresses<\/code> (2 z\u00e1znamy)<\/td>95% men\u0161\u00ed overhead<\/td><\/tr>
                              Opera\u010dn\u00ed data<\/strong><\/td>wp_postmeta<\/code> (15+ z\u00e1znam\u016f)<\/td>wp_wc_order_operational_data<\/code> (1 z\u00e1znam)<\/td>Strukturovan\u00fd form\u00e1t<\/td><\/tr>
                              Rychlost dotaz\u016f<\/strong><\/td>Baseline<\/td>70-90% rychlej\u0161\u00ed<\/strong><\/td>Bez meta JOIN\u016f<\/td><\/tr>
                              Velikost DB<\/strong><\/td>Baseline<\/td>40% men\u0161\u00ed<\/strong><\/td>Normalizace + indexy<\/td><\/tr>
                              Indexov\u00e1n\u00ed<\/strong><\/td>Generic post indexy<\/td>Specializovan\u00e9 indexy<\/td>Lep\u0161\u00ed query pl\u00e1ny<\/td><\/tr>
                              \u0160k\u00e1lovatelnost<\/strong><\/td>Problematick\u00e1 p\u0159i >10k objedn\u00e1vek<\/td>Line\u00e1rn\u00ed r\u016fst<\/td>Optimalizovan\u00e9 pro velk\u00fd objem<\/td><\/tr>
                              Kompatibilita<\/strong><\/td>100% s WordPress ekosyst\u00e9mem<\/td>Vy\u017eaduje HPOS aware pluginy<\/td>P\u0159echodov\u00e9 obdob\u00ed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

                              5.4 Konkr\u00e9tn\u00ed p\u0159\u00edklady rozd\u00edl\u016f<\/h3>\n\n\n\n

                              P\u0159\u00edklad 1: Na\u010dten\u00ed objedn\u00e1vky s adresami<\/h4>\n\n\n\n

                              Legacy:<\/strong><\/p>\n\n\n\n

                              -- 1 dotaz na post\nSELECT * FROM wp_posts WHERE ID = 12345 AND post_type = 'shop_order';\n\n-- 1 dotaz na v\u0161echny metadata (50-100 z\u00e1znam\u016f)\nSELECT meta_key, meta_value FROM wp_postmeta WHERE post_id = 12345;\n\n-- PHP mus\u00ed proj\u00edt v\u0161echny metadata a namapovat je na objektov\u00e9 properties\n-- Celkem: 2 dotazy, 50-100 \u0159\u00e1dk\u016f postmeta, pomal\u00fd PHP processing<\/code><\/pre>\n\n\n\n

                              HPOS:<\/strong><\/p>\n\n\n\n

                              -- 1 dotaz na z\u00e1kladn\u00ed data\nSELECT * FROM wp_wc_orders WHERE id = 12345;\n\n-- 1 dotaz na adresy (2 z\u00e1znamy)\nSELECT * FROM wp_wc_order_addresses WHERE order_id = 12345;\n\n-- 1 dotaz na opera\u010dn\u00ed data (1 z\u00e1znam)\nSELECT * FROM wp_wc_order_operational_data WHERE order_id = 12345;\n\n-- 1 dotaz na metadata (pouze custom\/plugin metadata)\nSELECT meta_key, meta_value FROM wp_wc_orders_meta WHERE order_id = 12345;\n\n-- Celkem: 4 dotazy, ale men\u0161\u00ed objem dat, rychlej\u0161\u00ed processing<\/code><\/pre>\n\n\n\n

                              P\u0159\u00edklad 2: Vyhled\u00e1v\u00e1n\u00ed podle emailu<\/h4>\n\n\n\n

                              Legacy:<\/strong><\/p>\n\n\n\n

                              -- Pomal\u00fd dotaz s meta JOINem\nSELECT p.ID\nFROM wp_posts p\nINNER JOIN wp_postmeta pm ON p.ID = pm.post_id\nWHERE p.post_type = 'shop_order'\n  AND pm.meta_key = '_billing_email'\n  AND pm.meta_value = 'zakaznik@example.com';\n\n-- \u010cas: ~500ms pro 10k objedn\u00e1vek\n-- Index: Nemo\u017en\u00e9 efektivn\u011b indexovat meta_value<\/code><\/pre>\n\n\n\n

                              HPOS:<\/strong><\/p>\n\n\n\n

                              -- Rychl\u00fd dotaz s indexem\nSELECT id\nFROM wp_wc_orders\nWHERE billing_email = 'zakaznik@example.com';\n\n-- \u010cas: ~5ms pro 10k objedn\u00e1vek (100x rychlej\u0161\u00ed!)\n-- Index: Direct index on billing_email column<\/code><\/pre>\n\n\n\n

                              P\u0159\u00edklad 3: Filtrov\u00e1n\u00ed podle data a statusu<\/h4>\n\n\n\n

                              Legacy:<\/strong><\/p>\n\n\n\n

                              -- Slo\u017eit\u00fd dotaz\nSELECT p.ID\nFROM wp_posts p\nWHERE p.post_type = 'shop_order'\n  AND p.post_status = 'wc-completed'\n  AND p.post_date >= '2025-01-01'\nORDER BY p.post_date DESC\nLIMIT 20;\n\n-- Probl\u00e9my:\n-- - post_status obsahuje prefix 'wc-'\n-- - post_date nen\u00ed GMT\n-- - \u017d\u00e1dn\u00fd composite index pro tento pattern<\/code><\/pre>\n\n\n\n

                              HPOS:<\/strong><\/p>\n\n\n\n

                              -- Optimalizovan\u00fd dotaz\nSELECT id\nFROM wp_wc_orders\nWHERE status = 'completed'\n  AND date_created_gmt >= '2025-01-01'\nORDER BY date_created_gmt DESC\nLIMIT 20;\n\n-- V\u00fdhody:\n-- - Pou\u017e\u00edv\u00e1 composite index type_status_date\n-- - GMT pro konzistenci\n-- - \u010cist\u00fd status bez prefixu<\/code><\/pre>\n\n\n\n
                              \n\n\n\n

                              6. M\u00f3d kompatibility<\/h2>\n\n\n\n

                              Compatibility Mode<\/strong> umo\u017e\u0148uje synchronizaci mezi Legacy a HPOS syst\u00e9my b\u011bhem p\u0159echodov\u00e9ho obdob\u00ed.<\/p>\n\n\n\n

                              6.1 Jak funguje kompatibilita?<\/h3>\n\n\n\n

                              Z\u00e1kladn\u00ed koncept:<\/strong><\/p>\n\n\n\n

                                \n
                              1. Dual storage<\/strong> – data existuj\u00ed v obou syst\u00e9mech sou\u010dasn\u011b<\/li>\n\n\n\n
                              2. Autoritativn\u00ed zdroj<\/strong> – jeden syst\u00e9m je „master“<\/li>\n\n\n\n
                              3. Automatick\u00e1 synchronizace<\/strong> – zm\u011bny se propaguj\u00ed do druh\u00e9ho syst\u00e9mu<\/li>\n<\/ol>\n\n\n\n

                                6.2 Re\u017eimy provozu<\/h3>\n\n\n\n

                                A. Legacy Mode (v\u00fdchoz\u00ed)<\/h4>\n\n\n\n
                                Autoritativn\u00ed: wp_posts + wp_postmeta\nSekund\u00e1rn\u00ed: wp_wc_orders* (pokud existuj\u00ed)<\/code><\/pre>\n\n\n\n
                                  \n
                                • V\u0161echny z\u00e1pisy jdou prim\u00e1rn\u011b do posts tabulek<\/li>\n\n\n\n
                                • HPOS tabulky se aktualizuj\u00ed na pozad\u00ed<\/li>\n\n\n\n
                                • Star\u00e1 funkcionalita 100% zachov\u00e1na<\/li>\n<\/ul>\n\n\n\n

                                  B. HPOS Mode (doporu\u010den\u00e9)<\/h4>\n\n\n\n
                                  Autoritativn\u00ed: wp_wc_orders*\nSekund\u00e1rn\u00ed: wp_posts + wp_postmeta (pokud sync zapnut\u00fd)<\/code><\/pre>\n\n\n\n
                                    \n
                                  • V\u0161echny z\u00e1pisy jdou prim\u00e1rn\u011b do HPOS tabulek<\/li>\n\n\n\n
                                  • Posts tabulky se aktualizuj\u00ed na pozad\u00ed (pro kompatibilitu)<\/li>\n\n\n\n
                                  • V\u00fdkon a\u017e 90% lep\u0161\u00ed<\/li>\n<\/ul>\n\n\n\n

                                    C. HPOS Only Mode (budoucnost)<\/h4>\n\n\n\n
                                    Autoritativn\u00ed: wp_wc_orders*\nSekund\u00e1rn\u00ed: \u017e\u00e1dn\u00e9<\/code><\/pre>\n\n\n\n
                                      \n
                                    • Pouze HPOS tabulky<\/li>\n\n\n\n
                                    • Posts tabulky se NEAKTUALIZUJ\u00cd<\/li>\n\n\n\n
                                    • Maxim\u00e1ln\u00ed v\u00fdkon<\/li>\n\n\n\n
                                    • Vy\u017eaduje v\u0161echny pluginy HPOS kompatibiln\u00ed<\/li>\n<\/ul>\n\n\n\n

                                      6.3 Synchroniza\u010dn\u00ed mechanismus<\/h3>\n\n\n\n

                                      Implementace:<\/strong> src\/Internal\/DataStores\/Orders\/DataSynchronizer.php<\/code><\/p>\n\n\n\n

                                      Trigger ud\u00e1losti:<\/strong><\/p>\n\n\n\n

                                        \n
                                      1. Vytvo\u0159en\u00ed objedn\u00e1vky<\/strong><\/li>\n<\/ol>\n\n\n\n
                                          \n
                                        1. Aktualizace objedn\u00e1vky<\/strong><\/li>\n<\/ol>\n\n\n\n
                                            \n
                                          1. Smaz\u00e1n\u00ed objedn\u00e1vky<\/strong><\/li>\n<\/ol>\n\n\n\n

                                            6.4 Sync m\u00f3dy<\/h3>\n\n\n\n

                                            Konfigurace:<\/strong> woocommerce_custom_orders_table_background_sync_mode<\/code><\/p>\n\n\n\n

                                            A. Interval Mode (doporu\u010den\u00e9)<\/h4>\n\n\n\n
                                            Hodnota: 'interval'\nChov\u00e1n\u00ed: Synchronizace ka\u017ed\u00fdch X minut (via WP Cron)<\/code><\/pre>\n\n\n\n
                                              \n
                                            • Minim\u00e1ln\u00ed dopad na v\u00fdkon<\/li>\n\n\n\n
                                            • Mo\u017en\u00e9 do\u010dasn\u00e9 nekonzistence (n\u011bkolik minut)<\/li>\n\n\n\n
                                            • Vhodn\u00e9 pro produk\u010dn\u00ed prost\u0159ed\u00ed<\/li>\n<\/ul>\n\n\n\n

                                              B. Continuous Mode<\/h4>\n\n\n\n
                                              Hodnota: 'continuous'\nChov\u00e1n\u00ed: Sync na shutdown hook\u016f<\/code><\/pre>\n\n\n\n
                                                \n
                                              • Rychlej\u0161\u00ed synchronizace<\/li>\n\n\n\n
                                              • V\u011bt\u0161\u00ed dopad na v\u00fdkon<\/li>\n\n\n\n
                                              • Vhodn\u00e9 pro men\u0161\u00ed obchody<\/li>\n<\/ul>\n\n\n\n

                                                C. Off Mode<\/h4>\n\n\n\n
                                                Hodnota: 'off'\nChov\u00e1n\u00ed: Pouze manu\u00e1ln\u00ed sync<\/code><\/pre>\n\n\n\n
                                                  \n
                                                • \u017d\u00e1dn\u00fd automatick\u00fd sync<\/li>\n\n\n\n
                                                • Vhodn\u00e9 pouze pro testov\u00e1n\u00ed<\/li>\n\n\n\n
                                                • Vy\u017eaduje ru\u010dn\u00ed spu\u0161t\u011bn\u00ed synchronizace<\/li>\n<\/ul>\n\n\n\n

                                                  6.5 Detekce nekonzistenc\u00ed<\/h3>\n\n\n\n

                                                  Metoda:<\/strong> DataSynchronizer::get_ids_of_orders_pending_sync()<\/code><\/p>\n\n\n\n

                                                  Typy nekonzistenc\u00ed:<\/strong><\/p>\n\n\n\n

                                                  ID_TYPE_MISSING_IN_ORDERS_TABLE = 0      \/\/ Objedn\u00e1vka v posts, chyb\u00ed v HPOS\nID_TYPE_MISSING_IN_POSTS_TABLE = 1       \/\/ Objedn\u00e1vka v HPOS, chyb\u00ed v posts\nID_TYPE_DIFFERENT_UPDATE_DATE = 2        \/\/ R\u016fzn\u00e9 datum aktualizace\nID_TYPE_DELETED_FROM_ORDERS_TABLE = 3    \/\/ Smaz\u00e1no z HPOS, existuje v posts\nID_TYPE_DELETED_FROM_POSTS_TABLE = 4     \/\/ Smaz\u00e1no z posts, existuje v HPOS<\/code><\/pre>\n\n\n\n

                                                  \u0158e\u0161en\u00ed konflikt\u016f:<\/strong><\/p>\n\n\n\n

                                                    \n
                                                  • Autoritativn\u00ed tabulka V\u017dDY vyhr\u00e1v\u00e1<\/li>\n\n\n\n
                                                  • Sekund\u00e1rn\u00ed tabulka se p\u0159ep\u00ed\u0161e<\/li>\n\n\n\n
                                                  • Log varov\u00e1n\u00ed pro manu\u00e1ln\u00ed kontrolu<\/li>\n<\/ul>\n\n\n\n

                                                    6.6 Workflow migrace s kompatibilitou<\/h3>\n\n\n\n
                                                    Krok 1: Aktivace HPOS (Settings > Advanced > Features)\n       \u2193\n       Stav: Legacy Mode (posts autoritativn\u00ed)\n       HPOS tabulky vytvo\u0159eny, ale nepou\u017e\u00edv\u00e1ny\n\nKrok 2: Zapnut\u00ed compatibility sync\n       \u2193\n       Stav: Legacy Mode + Sync ON\n       Data se za\u010d\u00ednaj\u00ed kop\u00edrovat do HPOS\n\nKrok 3: \u010cek\u00e1n\u00ed na dokon\u010den\u00ed migrace\n       \u2193\n       Progress: 0% \u2192 100%\n       Tools > WooCommerce > Status > Data Stores\n\nKrok 4: P\u0159epnut\u00ed na HPOS autoritativn\u00ed\n       \u2193\n       Stav: HPOS Mode + Sync ON\n       HPOS je nyn\u00ed prim\u00e1rn\u00ed zdroj\n\nKrok 5: Testov\u00e1n\u00ed (n\u011bkolik dn\u00ed\/t\u00fddn\u016f)\n       \u2193\n       Monitoring chyb, kontrola funkcionality\n\nKrok 6: Vypnut\u00ed syncu (voliteln\u00e9)\n       \u2193\n       Stav: HPOS Only Mode\n       Maxim\u00e1ln\u00ed v\u00fdkon, posts se p\u0159estanou aktualizovat<\/code><\/pre>\n\n\n\n

                                                    6.7 Kontrola stavu synchronizace<\/h3>\n\n\n\n

                                                    Admin UI:<\/strong> WooCommerce > Status > Data Stores<\/p>\n\n\n\n

                                                    Zobrazuje:<\/strong><\/p>\n\n\n\n

                                                      \n
                                                    • Po\u010det objedn\u00e1vek v posts tabulce<\/li>\n\n\n\n
                                                    • Po\u010det objedn\u00e1vek v HPOS tabulk\u00e1ch<\/li>\n\n\n\n
                                                    • Po\u010det nezsynchronizovan\u00fdch objedn\u00e1vek<\/li>\n\n\n\n
                                                    • Posledn\u00ed chyby<\/li>\n<\/ul>\n\n\n\n

                                                      Programov\u00fd p\u0159\u00edstup:<\/strong><\/p>\n\n\n\n

                                                      use Automattic\\WooCommerce\\Utilities\\OrderUtil;\n\n\/\/ Je HPOS aktivn\u00ed?\n$hpos_enabled = OrderUtil::custom_orders_table_usage_is_enabled();\n\n\/\/ Je sync aktivn\u00ed?\n$sync_enabled = OrderUtil::is_custom_order_tables_in_sync();\n\n\/\/ Kter\u00e1 tabulka je autoritativn\u00ed?\n$authoritative_table = OrderUtil::get_table_for_orders();\n\/\/ Vrac\u00ed: 'wp_wc_orders' nebo 'wp_posts'<\/code><\/pre>\n\n\n\n

                                                      6.8 Probl\u00e9my a \u0159e\u0161en\u00ed v kompatibilitn\u00edm m\u00f3du<\/h3>\n\n\n\n

                                                      Probl\u00e9m 1: Pomal\u00e9 ukl\u00e1d\u00e1n\u00ed objedn\u00e1vek<\/h4>\n\n\n\n

                                                      P\u0159\u00ed\u010dina:<\/strong> Dual write – z\u00e1pis do obou tabulek<\/p>\n\n\n\n

                                                      \u0158e\u0161en\u00ed:<\/strong> Pou\u017e\u00edt Interval Mode m\u00edsto Continuous<\/p>\n\n\n\n

                                                      Probl\u00e9m 2: Nekonzistence dat<\/h4>\n\n\n\n

                                                      P\u0159\u00ed\u010dina:<\/strong> Chyba b\u011bhem synchronizace<\/p>\n\n\n\n

                                                      \u0158e\u0161en\u00ed:<\/strong> Spustit WC CLI: wp wc cot sync<\/code><\/p>\n\n\n\n

                                                      Probl\u00e9m 3: Vysok\u00e1 z\u00e1t\u011b\u017e datab\u00e1ze<\/h4>\n\n\n\n

                                                      P\u0159\u00ed\u010dina:<\/strong> P\u0159\u00edli\u0161 \u010dast\u00e1 synchronizace<\/p>\n\n\n\n

                                                      \u0158e\u0161en\u00ed:<\/strong> Zv\u00fd\u0161it interval syncu (nap\u0159. z 5 na 15 minut)<\/p>\n\n\n\n

                                                      Probl\u00e9m 4: Plugin st\u00e1le pou\u017e\u00edv\u00e1 posts<\/h4>\n\n\n\n

                                                      P\u0159\u00ed\u010dina:<\/strong> Plugin nen\u00ed HPOS kompatibiln\u00ed<\/p>\n\n\n\n

                                                      \u0158e\u0161en\u00ed:<\/strong> Nechat sync zapnut\u00fd, kontaktovat autora pluginu<\/p>\n\n\n\n


                                                      \n\n\n\n

                                                      7. Data neukl\u00e1dan\u00e1 do defaultn\u00edch tabulek<\/h2>\n\n\n\n

                                                      Po p\u0159echodu na HPOS se n\u011bkter\u00e1 data neukl\u00e1daj\u00ed<\/strong> nebo neukl\u00e1daj\u00ed standardn\u011b<\/strong> do p\u016fvodn\u00edch WooCommerce tabulek.<\/p>\n\n\n\n

                                                      7.1 Data NIKDY nesynchronizovan\u00e1 do posts tabulky<\/h3>\n\n\n\n

                                                      I kdy\u017e je kompatibilita zapnut\u00e1, n\u00e1sleduj\u00edc\u00ed data nejsou<\/strong> v wp_posts<\/code>:<\/p>\n\n\n\n

                                                      A. Strukturovan\u00e1 adresn\u00ed data<\/h4>\n\n\n\n

                                                      V Legacy:<\/strong><\/p>\n\n\n\n

                                                      wp_postmeta:\n- _billing_first_name\n- _billing_last_name\n- _billing_address_1\n- _billing_city\n- ... (20 z\u00e1znam\u016f pro billing)\n- _shipping_first_name\n- ... (20 z\u00e1znam\u016f pro shipping)<\/code><\/pre>\n\n\n\n

                                                      V HPOS:<\/strong><\/p>\n\n\n\n

                                                      wp_wc_order_addresses:\n- 1 z\u00e1znam pro billing (address_type = 'billing')\n- 1 z\u00e1znam pro shipping (address_type = 'shipping')\n\nwp_postmeta: NEN\u00cd synchronizov\u00e1no (pokud HPOS autoritativn\u00ed)<\/code><\/pre>\n\n\n\n

                                                      Dopad:<\/strong><\/p>\n\n\n\n

                                                        \n
                                                      • Pluginy \u010dtouc\u00ed _billing_*<\/code> metadata p\u0159\u00edmo z postmeta NEBUDOU fungovat<\/strong><\/li>\n\n\n\n
                                                      • Mus\u00ed pou\u017e\u00edt WooCommerce API: $order->get_billing_first_name()<\/code><\/li>\n<\/ul>\n\n\n\n

                                                        B. Opera\u010dn\u00ed flagy<\/h4>\n\n\n\n

                                                        V Legacy:<\/strong><\/p>\n\n\n\n

                                                        wp_postmeta:\n- _order_stock_reduced\n- _download_permission_granted\n- _new_order_email_sent\n- _recorded_sales\n- _coupon_usages_are_counted<\/code><\/pre>\n\n\n\n

                                                        V HPOS:<\/strong><\/p>\n\n\n\n

                                                        wp_wc_order_operational_data:\n- order_stock_reduced (tinyint column)\n- download_permission_granted\n- new_order_email_sent\n- recorded_sales\n- coupon_usages_are_counted\n\nwp_postmeta: NEN\u00cd synchronizov\u00e1no<\/code><\/pre>\n\n\n\n

                                                        C. Datum operac\u00ed<\/h4>\n\n\n\n

                                                        V Legacy:<\/strong><\/p>\n\n\n\n

                                                        wp_postmeta:\n- _date_paid (timestamp)\n- _date_completed (timestamp)<\/code><\/pre>\n\n\n\n

                                                        V HPOS:<\/strong><\/p>\n\n\n\n

                                                        wp_wc_order_operational_data:\n- date_paid_gmt (datetime)\n- date_completed_gmt (datetime)\n\nwp_postmeta: NEN\u00cd synchronizov\u00e1no<\/code><\/pre>\n\n\n\n

                                                        7.2 Data ukl\u00e1dan\u00e1 duplicitn\u011b (kv\u016fli kompatibilit\u011b)<\/h3>\n\n\n\n

                                                        Pokud je sync zapnut\u00fd<\/strong>, tato data jsou v OBOU syst\u00e9mech:<\/p>\n\n\n\n

                                                        A. Z\u00e1kladn\u00ed metadata objedn\u00e1vky<\/h4>\n\n\n\n
                                                        wp_wc_orders_meta + wp_postmeta:\n- _customer_user\n- _order_currency\n- _payment_method\n- _payment_method_title\n- _transaction_id\n- _order_key\n- _order_total\n- _order_tax\n- _order_shipping<\/code><\/pre>\n\n\n\n

                                                        D\u016fvod:<\/strong> Kompatibilita se star\u00fdmi pluginy<\/p>\n\n\n\n

                                                        B. Statusov\u00e9 informace<\/h4>\n\n\n\n
                                                        wp_wc_orders.status <-> wp_posts.post_status<\/code><\/pre>\n\n\n\n
                                                          \n
                                                        • HPOS: 'completed'<\/code><\/li>\n\n\n\n
                                                        • Posts: 'wc-completed'<\/code> (s prefixem)<\/li>\n<\/ul>\n\n\n\n

                                                          7.3 Data NEUKL\u00c1DAN\u00c1 nikde po HPOS migraci<\/h3>\n\n\n\n

                                                          A. Post-specific data (pokud sync vypnut\u00fd)<\/h4>\n\n\n\n

                                                          Ztracen\u00e1 data:<\/strong><\/p>\n\n\n\n

                                                          wp_posts:\n- post_content (obvykle pr\u00e1zdn\u00e9 u objedn\u00e1vek)\n- post_excerpt (customer_note - p\u0159esunut\u00fd do wp_wc_orders.customer_note)\n- post_title (nap\u0159. \"Objedn\u00e1vka #12345\")\n- post_name (slug)\n- post_author (v\u017edy 0)\n- post_parent (duplicitn\u00ed s parent_order_id)\n- comment_count\n- ping_status, comment_status\n- menu_order\n- guid<\/code><\/pre>\n\n\n\n

                                                          Dopad:<\/strong> Minim\u00e1ln\u00ed, tato data nebyla vyu\u017e\u00edvan\u00e1<\/p>\n\n\n\n

                                                          B. Revize objedn\u00e1vek<\/h4>\n\n\n\n

                                                          V Legacy:<\/strong><\/p>\n\n\n\n

                                                          wp_posts: post_type = 'revision', post_parent = order_id<\/code><\/pre>\n\n\n\n

                                                          V HPOS:<\/strong><\/p>\n\n\n\n

                                                          \u017d\u00c1DN\u00c9 revize!<\/code><\/pre>\n\n\n\n

                                                          Dopad:<\/strong> Nelze vr\u00e1tit objedn\u00e1vku na p\u0159edchoz\u00ed stav (tato funkcionalita nebyla v WC nikdy nativn\u011b)<\/p>\n\n\n\n

                                                          C. Custom post metadata od plugin\u016f<\/h4>\n\n\n\n

                                                          Probl\u00e9m:<\/strong><\/p>\n\n\n\n

                                                          \/\/ Star\u00fd plugin ukl\u00e1d\u00e1 vlastn\u00ed metadata\nadd_post_meta($order_id, '_custom_plugin_data', 'value');\n\n\/\/ Po HPOS migraci:\n\/\/ - Pokud sync ON: Bude v wp_postmeta (ale NEAKTUALIZUJE se automaticky)\n\/\/ - Pokud sync OFF: DATA ZTRACENA!<\/code><\/pre>\n\n\n\n

                                                          \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                          \/\/ HPOS kompatibiln\u00ed k\u00f3d\n$order = wc_get_order($order_id);\n$order->update_meta_data('_custom_plugin_data', 'value');\n$order->save();\n\/\/ \u2192 Ulo\u017e\u00ed do wp_wc_orders_meta (a wp_postmeta pokud sync ON)<\/code><\/pre>\n\n\n\n

                                                          7.4 Data NEREGENEROVAN\u00c1 automaticky<\/h3>\n\n\n\n

                                                          A. Lookup tabulky pro analytics<\/h4>\n\n\n\n

                                                          Probl\u00e9m:<\/strong><\/p>\n\n\n\n

                                                            \n
                                                          • wp_wc_order_stats<\/code><\/li>\n\n\n\n
                                                          • wp_wc_order_product_lookup<\/code><\/li>\n\n\n\n
                                                          • wp_wc_order_tax_lookup<\/code><\/li>\n\n\n\n
                                                          • wp_wc_order_coupon_lookup<\/code><\/li>\n<\/ul>\n\n\n\n

                                                            Nejsou<\/strong> automaticky napln\u011bny po HPOS migraci!<\/p>\n\n\n\n

                                                            \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                            # WP-CLI regenerace\nwp wc tool run regenerate_product_lookup_tables --user=admin\nwp wc tool run clear_transients --user=admin<\/code><\/pre>\n\n\n\n

                                                            Admin UI:<\/strong><\/p>\n\n\n\n

                                                            WooCommerce > Status > Tools > Regenerate shop thumbnails\nWooCommerce > Status > Tools > Clear template cache<\/code><\/pre>\n\n\n\n

                                                            B. Produktov\u00e9 lookup tabulky<\/h4>\n\n\n\n

                                                            Probl\u00e9m:<\/strong><\/p>\n\n\n\n

                                                              \n
                                                            • wp_wc_product_meta_lookup<\/code> m\u016f\u017ee b\u00fdt zastaral\u00e1<\/li>\n<\/ul>\n\n\n\n

                                                              \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                              \/\/ Automatick\u00e1 regenerace p\u0159i save produktu\n$product = wc_get_product($product_id);\n$product->save();<\/code><\/pre>\n\n\n\n

                                                              7.5 Metadata NEUKL\u00c1DAN\u00c1 do wp_wc_orders_meta<\/h3>\n\n\n\n

                                                              N\u00e1sleduj\u00edc\u00ed „internal“ metadata NEJSOU<\/strong> v meta tabulce (jsou ve sloupc\u00edch):<\/p>\n\n\n\n

                                                              \/\/ OrdersTableDataStore.php internal_meta_keys\n$internal_keys = array(\n    '_order_currency',           \/\/ \u2192 wp_wc_orders.currency\n    '_prices_include_tax',       \/\/ \u2192 wp_wc_order_operational_data.prices_include_tax\n    '_customer_user',            \/\/ \u2192 wp_wc_orders.customer_id\n    '_order_key',                \/\/ \u2192 wp_wc_order_operational_data.order_key\n    '_billing_email',            \/\/ \u2192 wp_wc_orders.billing_email\n    '_billing_*',                \/\/ \u2192 wp_wc_order_addresses (billing row)\n    '_shipping_*',               \/\/ \u2192 wp_wc_order_addresses (shipping row)\n    '_payment_method',           \/\/ \u2192 wp_wc_orders.payment_method\n    '_payment_method_title',     \/\/ \u2192 wp_wc_orders.payment_method_title\n    '_transaction_id',           \/\/ \u2192 wp_wc_orders.transaction_id\n    '_customer_ip_address',      \/\/ \u2192 wp_wc_orders.ip_address\n    '_customer_user_agent',      \/\/ \u2192 wp_wc_orders.user_agent\n    '_created_via',              \/\/ \u2192 wp_wc_order_operational_data.created_via\n    '_date_paid',                \/\/ \u2192 wp_wc_order_operational_data.date_paid_gmt\n    '_date_completed',           \/\/ \u2192 wp_wc_order_operational_data.date_completed_gmt\n    '_cart_hash',                \/\/ \u2192 wp_wc_order_operational_data.cart_hash\n    '_order_stock_reduced',      \/\/ \u2192 wp_wc_order_operational_data.order_stock_reduced\n    '_download_permissions_granted', \/\/ \u2192 wp_wc_order_operational_data.download_permission_granted\n    '_recorded_sales',           \/\/ \u2192 wp_wc_order_operational_data.recorded_sales\n    '_recorded_coupon_usage_counts', \/\/ \u2192 wp_wc_order_operational_data.coupon_usages_are_counted\n    '_order_shipping',           \/\/ \u2192 wp_wc_order_operational_data.shipping_total_amount\n    '_order_shipping_tax',       \/\/ \u2192 wp_wc_order_operational_data.shipping_tax_amount\n    '_cart_discount',            \/\/ \u2192 wp_wc_order_operational_data.discount_total_amount\n    '_cart_discount_tax',        \/\/ \u2192 wp_wc_order_operational_data.discount_tax_amount\n    '_order_total',              \/\/ \u2192 wp_wc_orders.total_amount\n    '_order_tax',                \/\/ \u2192 wp_wc_orders.tax_amount\n);<\/code><\/pre>\n\n\n\n

                                                              D\u016fsledek:<\/strong><\/p>\n\n\n\n

                                                              \/\/ Nefunguje:\n$order->get_meta('_billing_first_name'); \/\/ Vr\u00e1t\u00ed empty\n\n\/\/ Funguje:\n$order->get_billing_first_name(); \/\/ Vr\u00e1t\u00ed hodnotu ze wp_wc_order_addresses<\/code><\/pre>\n\n\n\n

                                                              7.6 Srovn\u00e1vac\u00ed tabulka \u00falo\u017ei\u0161\u0165<\/h3>\n\n\n\n
                                                              Data<\/th>Legacy (Posts)<\/th>HPOS<\/th>HPOS + Sync<\/th>HPOS Only<\/th><\/tr><\/thead>
                                                              Z\u00e1kladn\u00ed info<\/strong><\/td>wp_posts<\/td>wp_wc_orders<\/td>Oboj\u00ed<\/td>wp_wc_orders<\/td><\/tr>
                                                              Adresy<\/strong><\/td>wp_postmeta (40 \u0159\u00e1dk\u016f)<\/td>wp_wc_order_addresses (2 \u0159\u00e1dky)<\/td>Oboj\u00ed<\/td>wp_wc_order_addresses<\/td><\/tr>
                                                              Opera\u010dn\u00ed data<\/strong><\/td>wp_postmeta (15 \u0159\u00e1dk\u016f)<\/td>wp_wc_order_operational_data (1 \u0159\u00e1dek)<\/td>HPOS only<\/td>wp_wc_order_operational_data<\/td><\/tr>
                                                              Custom metadata<\/strong><\/td>wp_postmeta<\/td>wp_wc_orders_meta<\/td>Oboj\u00ed<\/td>wp_wc_orders_meta<\/td><\/tr>
                                                              Order items<\/strong><\/td>wp_woocommerce_order_items<\/td>wp_woocommerce_order_items<\/td>Stejn\u00e9<\/td>wp_woocommerce_order_items<\/td><\/tr>
                                                              Item metadata<\/strong><\/td>wp_woocommerce_order_itemmeta<\/td>wp_woocommerce_order_itemmeta<\/td>Stejn\u00e9<\/td>wp_woocommerce_order_itemmeta<\/td><\/tr>
                                                              Analytics<\/strong><\/td>Nevygenerov\u00e1no<\/td>Nevygenerov\u00e1no<\/td>Mus\u00ed se regenerovat<\/td>Mus\u00ed se regenerovat<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

                                                              7.7 Kontroln\u00ed checklist po migraci<\/h3>\n\n\n\n

                                                              Data k ov\u011b\u0159en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                \n
                                                              • [ ] Order totals se shoduj\u00ed (posts vs HPOS)<\/li>\n\n\n\n
                                                              • [ ] Billing\/shipping adresy kompletn\u00ed<\/li>\n\n\n\n
                                                              • [ ] Platebn\u00ed metody spr\u00e1vn\u011b p\u0159eneseny<\/li>\n\n\n\n
                                                              • [ ] Transaction IDs zachov\u00e1ny<\/li>\n\n\n\n
                                                              • [ ] Order notes nezm\u011bn\u011bny (ty jsou v wp_comments!)<\/li>\n\n\n\n
                                                              • [ ] Custom plugin metadata p\u0159enesena<\/li>\n\n\n\n
                                                              • [ ] Analytics lookup tabulky regenerov\u00e1ny<\/li>\n\n\n\n
                                                              • [ ] Star\u00e9 pluginy funguj\u00ed (pokud sync ON)<\/li>\n\n\n\n
                                                              • [ ] Full Text Search indexy vytvo\u0159eny (pokud po\u017eadov\u00e1no)<\/li>\n<\/ul>\n\n\n\n

                                                                WP-CLI kontrola:<\/strong><\/p>\n\n\n\n

                                                                # Kontrola po\u010dtu objedn\u00e1vek\nwp db query \"SELECT COUNT(*) FROM wp_posts WHERE post_type='shop_order'\"\nwp db query \"SELECT COUNT(*) FROM wp_wc_orders\"\n\n# Kontrola nekonzistenc\u00ed\nwp wc cot verify-cot-data\n\n# Synchronizace\nwp wc cot sync<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8. Kl\u00ed\u010dov\u00e9 PHP t\u0159\u00eddy<\/h2>\n\n\n\n

                                                                8.1 CustomOrdersTableController<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Internal\/DataStores\/Orders\/CustomOrdersTableController.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Centr\u00e1ln\u00ed \u0159\u00edzen\u00ed HPOS funkcionality<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class CustomOrdersTableController {\n    \/\/ Zjist\u00ed, zda je HPOS autoritativn\u00ed zdroj\n    public function custom_orders_table_usage_is_enabled(): bool;\n\n    \/\/ Vr\u00e1t\u00ed spr\u00e1vn\u00fd data store (HPOS nebo Legacy)\n    public function get_orders_data_store(): string;\n\n    \/\/ Zjist\u00ed, zda je cache zapnut\u00fd\n    public function hpos_data_caching_is_enabled(): bool;\n\n    \/\/ P\u0159id\u00e1 admin tools pro HPOS\n    public function add_hpos_tools(): void;\n\n    \/\/ Zpracuje zm\u011bnu nastaven\u00ed HPOS\n    public function process_updated_option( $option, $old_value, $value ): void;\n}<\/code><\/pre>\n\n\n\n

                                                                Konstanty:<\/strong><\/p>\n\n\n\n

                                                                const CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION =\n    'woocommerce_custom_orders_table_enabled';\n\nconst ORDERS_DATA_SYNC_ENABLED_OPTION =\n    'woocommerce_custom_orders_table_data_sync_enabled';\n\nconst USE_DB_TRANSACTIONS_OPTION =\n    'woocommerce_use_db_transactions_for_custom_orders_table_data_sync';\n\nconst HPOS_FTS_INDEX_OPTION =\n    'woocommerce_hpos_fts_index_enabled';<\/code><\/pre>\n\n\n\n

                                                                Filter hooks:<\/strong><\/p>\n\n\n\n

                                                                \/\/ Zm\u011bn\u00ed data store pro objedn\u00e1vky\nadd_filter('woocommerce_order_data_store',\n    [$controller, 'get_orders_data_store']);\n\n\/\/ Zm\u011bn\u00ed data store pro refundy\nadd_filter('woocommerce_order-refund_data_store',\n    [$controller, 'get_orders_refund_data_store']);<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8.2 OrdersTableDataStore<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Internal\/DataStores\/Orders\/OrdersTableDataStore.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> CRUD operace nad HPOS tabulkami<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class OrdersTableDataStore extends \\WC_Abstract_Order_Data_Store {\n    \/\/ Na\u010dte objedn\u00e1vku z HPOS\n    public function read( &$order ): void;\n\n    \/\/ Vytvo\u0159\u00ed novou objedn\u00e1vku\n    public function create( &$order ): void;\n\n    \/\/ Aktualizuje existuj\u00edc\u00ed objedn\u00e1vku\n    public function update( &$order ): void;\n\n    \/\/ Sma\u017ee objedn\u00e1vku\n    public function delete( &$order, $args = array() ): void;\n\n    \/\/ Vr\u00e1t\u00ed SQL schema pro HPOS tabulky\n    public static function get_database_schema(): string;\n\n    \/\/ Mapov\u00e1n\u00ed properties \u2192 sloupce\n    protected function get_all_order_column_mappings(): array;\n\n    \/\/ Pr\u00e1ce s adresami\n    protected function sync_order_address_to_order_address_table( $order ): void;\n\n    \/\/ Pr\u00e1ce s opera\u010dn\u00edmi daty\n    protected function sync_order_operational_data_to_order_table( $order ): void;\n}<\/code><\/pre>\n\n\n\n

                                                                Internal meta keys (sloupce, ne metadata):<\/strong><\/p>\n\n\n\n

                                                                protected $internal_meta_keys = array(\n    '_order_currency',\n    '_prices_include_tax',\n    '_customer_user',\n    '_billing_email',\n    '_billing_first_name',\n    \/\/ ... (viz sekce 7.5)\n);<\/code><\/pre>\n\n\n\n

                                                                Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                                                                \/\/ Automaticky se pou\u017e\u00edv\u00e1 p\u0159i HPOS enabled\n$order = wc_get_order(12345);\n\/\/ \u2192 Intern\u011b vol\u00e1 OrdersTableDataStore::read()<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8.3 DataSynchronizer<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Internal\/DataStores\/Orders\/DataSynchronizer.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Synchronizace mezi posts a HPOS tabulkami<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class DataSynchronizer {\n    \/\/ Zjist\u00ed IDs objedn\u00e1vek \u010dekaj\u00edc\u00edch na sync\n    public function get_ids_of_orders_pending_sync(\n        int $limit,\n        array $order_types = array()\n    ): array;\n\n    \/\/ Synchronizuje konkr\u00e9tn\u00ed objedn\u00e1vky\n    public function process_batch( array $order_ids ): BatchProcessingResult;\n\n    \/\/ Zjist\u00ed celkov\u00fd po\u010det pending sync\u016f\n    public function get_total_pending_count(): int;\n\n    \/\/ Zjist\u00ed, zda je sync aktivn\u00ed\n    public function data_sync_is_enabled(): bool;\n\n    \/\/ Zjist\u00ed sync m\u00f3d (interval\/continuous\/off)\n    public function get_background_sync_mode(): string;\n}<\/code><\/pre>\n\n\n\n

                                                                Konstanty pro typy nekonzistenc\u00ed:<\/strong><\/p>\n\n\n\n

                                                                const ID_TYPE_MISSING_IN_ORDERS_TABLE = 0;\nconst ID_TYPE_MISSING_IN_POSTS_TABLE = 1;\nconst ID_TYPE_DIFFERENT_UPDATE_DATE = 2;\nconst ID_TYPE_DELETED_FROM_ORDERS_TABLE = 3;\nconst ID_TYPE_DELETED_FROM_POSTS_TABLE = 4;<\/code><\/pre>\n\n\n\n

                                                                Sync m\u00f3dy:<\/strong><\/p>\n\n\n\n

                                                                const BACKGROUND_SYNC_MODE_INTERVAL = 'interval';\nconst BACKGROUND_SYNC_MODE_CONTINUOUS = 'continuous';\nconst BACKGROUND_SYNC_MODE_OFF = 'off';<\/code><\/pre>\n\n\n\n

                                                                Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                                                                $synchronizer = wc_get_container()\n    ->get( DataSynchronizer::class );\n\n\/\/ Po\u010det pending sync\u016f\n$pending = $synchronizer->get_total_pending_count();\n\n\/\/ Manu\u00e1ln\u00ed sync batch\n$order_ids = [12345, 12346, 12347];\n$result = $synchronizer->process_batch( $order_ids );<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8.4 OrderUtil (Helper t\u0159\u00edda)<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Utilities\/OrderUtil.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Utility funkce pro pr\u00e1ci s HPOS<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class OrderUtil {\n    \/\/ Je HPOS autoritativn\u00ed?\n    public static function custom_orders_table_usage_is_enabled(): bool;\n\n    \/\/ Je datastore cache zapnut\u00fd?\n    public static function custom_orders_table_datastore_cache_enabled(): bool;\n\n    \/\/ Je order object cache zapnut\u00fd?\n    public static function orders_cache_usage_is_enabled(): bool;\n\n    \/\/ Je sync aktivn\u00ed?\n    public static function is_custom_order_tables_in_sync(): bool;\n\n    \/\/ Vr\u00e1t\u00ed n\u00e1zev tabulky pro objedn\u00e1vky\n    public static function get_table_for_orders(): string;\n\n    \/\/ Vr\u00e1t\u00ed n\u00e1zev tabulky pro metadata\n    public static function get_table_for_order_meta(): string;\n\n    \/\/ Po\u010det objedn\u00e1vek podle typu\n    public static function get_count_for_type( string $type ): int;\n\n    \/\/ Je HPOS aktivn\u00ed (v\u016fbec)?\n    public static function is_custom_order_tables_usage_enabled(): bool;\n}<\/code><\/pre>\n\n\n\n

                                                                Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                                                                use Automattic\\WooCommerce\\Utilities\\OrderUtil;\n\n\/\/ Kontrola HPOS\nif ( OrderUtil::custom_orders_table_usage_is_enabled() ) {\n    echo \"HPOS je autoritativn\u00ed zdroj\";\n} else {\n    echo \"Posts tabulka je autoritativn\u00ed\";\n}\n\n\/\/ N\u00e1zev tabulky\n$table = OrderUtil::get_table_for_orders();\n\/\/ \u2192 'wp_wc_orders' nebo 'wp_posts'\n\n$meta_table = OrderUtil::get_table_for_order_meta();\n\/\/ \u2192 'wp_wc_orders_meta' nebo 'wp_postmeta'\n\n\/\/ Po\u010det objedn\u00e1vek\n$count = OrderUtil::get_count_for_type( 'shop_order' );<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8.5 DatabaseUtil<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Internal\/Utilities\/DatabaseUtil.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Low-level DB operace<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class DatabaseUtil {\n    \/\/ Wrapper pro WordPress dbDelta\n    public static function dbdelta( string $sql ): array;\n\n    \/\/ Zjist\u00ed chyb\u011bj\u00edc\u00ed tabulky\n    public static function get_missing_tables(): array;\n\n    \/\/ Sma\u017ee tabulku bezpe\u010dn\u011b\n    public static function drop_database_table( string $table ): void;\n\n    \/\/ Vytvo\u0159\u00ed prim\u00e1rn\u00ed kl\u00ed\u010d\n    public static function create_primary_key(\n        string $table,\n        string $column\n    ): void;\n\n    \/\/ Konverze hodnoty pro DB\n    public static function format_object_value_for_db(\n        $value,\n        string $type\n    );\n\n    \/\/ Kontrola FTS indexu\n    public static function fts_index_on_order_address_table_exists(): bool;\n}<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                8.6 Migrace t\u0159\u00eddy<\/h3>\n\n\n\n

                                                                PostsToOrdersMigrationController<\/h4>\n\n\n\n

                                                                Soubor:<\/strong> src\/Database\/Migrations\/CustomOrderTable\/PostsToOrdersMigrationController.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Orchestruje celou migraci<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class PostsToOrdersMigrationController {\n    \/\/ Spust\u00ed migraci\n    public function migrate_orders( int $batch_size = 100 ): MigrationResult;\n\n    \/\/ Po\u010det zb\u00fdvaj\u00edc\u00edch objedn\u00e1vek k migraci\n    public function count_orders_to_migrate(): int;\n\n    \/\/ Stav migrace\n    public function get_migration_status(): array;\n\n    \/\/ Rollback migrace\n    public function rollback_migration(): void;\n}<\/code><\/pre>\n\n\n\n

                                                                PostToOrderTableMigrator<\/h4>\n\n\n\n

                                                                Soubor:<\/strong> src\/Database\/Migrations\/CustomOrderTable\/PostToOrderTableMigrator.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Migruje data z wp_posts<\/code> do wp_wc_orders<\/code><\/p>\n\n\n\n

                                                                PostMetaToOrderMetaMigrator<\/h4>\n\n\n\n

                                                                Soubor:<\/strong> src\/Database\/Migrations\/CustomOrderTable\/PostMetaToOrderMetaMigrator.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Migruje metadata<\/p>\n\n\n\n

                                                                PostToOrderAddressTableMigrator<\/h4>\n\n\n\n

                                                                Soubor:<\/strong> src\/Database\/Migrations\/CustomOrderTable\/PostToOrderAddressTableMigrator.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Extrahuje adresy do wp_wc_order_addresses<\/code><\/p>\n\n\n\n

                                                                PostToOrderOpTableMigrator<\/h4>\n\n\n\n

                                                                Soubor:<\/strong> src\/Database\/Migrations\/CustomOrderTable\/PostToOrderOpTableMigrator.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Extrahuje opera\u010dn\u00ed data<\/p>\n\n\n\n


                                                                \n\n\n\n

                                                                8.7 LegacyDataHandler<\/h3>\n\n\n\n

                                                                Soubor:<\/strong> src\/Internal\/DataStores\/Orders\/LegacyDataHandler.php<\/code><\/p>\n\n\n\n

                                                                \u00da\u010del:<\/strong> Zp\u011btn\u00e1 kompatibilita s Legacy k\u00f3dem<\/p>\n\n\n\n

                                                                Kl\u00ed\u010dov\u00e9 metody:<\/strong><\/p>\n\n\n\n

                                                                class LegacyDataHandler {\n    \/\/ P\u0159evede HPOS order na Legacy format\n    public function convert_order_to_legacy_format( $order ): array;\n\n    \/\/ P\u0159evede Legacy format na HPOS\n    public function convert_legacy_format_to_order( array $data ): WC_Order;\n\n    \/\/ Mapov\u00e1n\u00ed Legacy meta keys\n    public function get_legacy_meta_key_mappings(): array;\n}<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                9. Konfigurace a nastaven\u00ed<\/h2>\n\n\n\n

                                                                9.1 WordPress Options (wp_options)<\/h3>\n\n\n\n

                                                                V\u0161echny HPOS related options:<\/strong><\/p>\n\n\n\n

                                                                \/\/ === Hlavn\u00ed nastaven\u00ed ===\n\n\/\/ Je HPOS autoritativn\u00ed zdroj?\n'woocommerce_custom_orders_table_enabled'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'no'\n\n\/\/ Je synchronizace aktivn\u00ed?\n'woocommerce_custom_orders_table_data_sync_enabled'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'yes' (p\u0159i prvn\u00edm zapnut\u00ed HPOS)\n\n\/\/ Byly HPOS tabulky vytvo\u0159eny?\n'woocommerce_custom_orders_table_created'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Intern\u00ed flag\n\n\/\/ === Synchronizace ===\n\n\/\/ M\u00f3d background syncu\n'woocommerce_custom_orders_table_background_sync_mode'\n\/\/ Hodnoty: 'interval' | 'continuous' | 'off'\n\/\/ Default: 'interval'\n\n\/\/ Interval syncu (v sekund\u00e1ch)\n'woocommerce_custom_orders_table_background_sync_interval'\n\/\/ Hodnoty: int (nap\u0159. 300 = 5 minut)\n\/\/ Default: 300\n\n\/\/ Pou\u017e\u00edvat DB transakce pro sync?\n'woocommerce_use_db_transactions_for_custom_orders_table_data_sync'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'yes'\n\n\/\/ Isolation level transakc\u00ed\n'woocommerce_db_transactions_isolation_level_for_custom_orders_table_data_sync'\n\/\/ Hodnoty: 'READ UNCOMMITTED' | 'READ COMMITTED' | 'REPEATABLE READ' | 'SERIALIZABLE'\n\/\/ Default: 'REPEATABLE READ'\n\n\/\/ === Performance ===\n\n\/\/ Je HPOS datastore cache zapnut\u00fd?\n'woocommerce_hpos_datastore_caching_enabled'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'yes'\n\n\/\/ Je order object cache zapnut\u00fd?\n'woocommerce_orders_cache_enabled'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'yes'\n\n\/\/ === Full Text Search ===\n\n\/\/ Je FTS index zapnut\u00fd?\n'woocommerce_hpos_fts_index_enabled'\n\/\/ Hodnoty: 'yes' | 'no'\n\/\/ Default: 'no'\n\n\/\/ === Migration Status ===\n\n\/\/ Stav migrace (serialized array)\n'woocommerce_custom_orders_table_migration_status'\n\/\/ Obsahuje: pending_count, migrated_count, errors, last_batch_time\n\n\/\/ Posledn\u00edch X chyb migrace\n'woocommerce_custom_orders_table_migration_errors'\n\/\/ Array serializovan\u00fd<\/code><\/pre>\n\n\n\n
                                                                \n\n\n\n

                                                                9.2 Aktivace HPOS p\u0159es Admin UI<\/h3>\n\n\n\n

                                                                Cesta:<\/strong> WooCommerce > Settings > Advanced > Features<\/p>\n\n\n\n

                                                                Sekce:<\/strong> „Custom data stores“<\/p>\n\n\n\n

                                                                Mo\u017enosti:<\/strong><\/p>\n\n\n\n

                                                                  \n
                                                                1. High-performance order storage<\/strong><\/li>\n<\/ol>\n\n\n\n
                                                                    \n
                                                                  1. Enable compatibility mode<\/strong><\/li>\n<\/ol>\n\n\n\n
                                                                      \n
                                                                    1. Background sync mode<\/strong><\/li>\n<\/ol>\n\n\n\n
                                                                        \n
                                                                      1. Make HPOS authoritative<\/strong><\/li>\n<\/ol>\n\n\n\n
                                                                        \n\n\n\n

                                                                        9.3 Programov\u00e1 konfigurace<\/h3>\n\n\n\n

                                                                        Zji\u0161t\u011bn\u00ed stavu:<\/strong><\/p>\n\n\n\n

                                                                        use Automattic\\WooCommerce\\Utilities\\OrderUtil;\n\n\/\/ Je HPOS autoritativn\u00ed?\n$hpos_enabled = OrderUtil::custom_orders_table_usage_is_enabled();\n\n\/\/ Je sync zapnut\u00fd?\n$sync_enabled = get_option(\n    'woocommerce_custom_orders_table_data_sync_enabled'\n) === 'yes';\n\n\/\/ Sync m\u00f3d\n$sync_mode = get_option(\n    'woocommerce_custom_orders_table_background_sync_mode',\n    'interval'\n);\n\n\/\/ Je cache zapnut\u00fd?\n$cache_enabled = OrderUtil::custom_orders_table_datastore_cache_enabled();\n\n\/\/ FTS indexy?\n$fts_enabled = get_option(\n    'woocommerce_hpos_fts_index_enabled'\n) === 'yes';<\/code><\/pre>\n\n\n\n

                                                                        Zm\u011bna nastaven\u00ed:<\/strong><\/p>\n\n\n\n

                                                                        \/\/ Aktivovat HPOS\nupdate_option( 'woocommerce_custom_orders_table_enabled', 'yes' );\n\n\/\/ Zapnout sync\nupdate_option( 'woocommerce_custom_orders_table_data_sync_enabled', 'yes' );\n\n\/\/ Zm\u011bnit sync m\u00f3d\nupdate_option(\n    'woocommerce_custom_orders_table_background_sync_mode',\n    'continuous'\n);\n\n\/\/ Zm\u011bnit sync interval (10 minut)\nupdate_option(\n    'woocommerce_custom_orders_table_background_sync_interval',\n    600\n);\n\n\/\/ Zapnout FTS indexy\nupdate_option( 'woocommerce_hpos_fts_index_enabled', 'yes' );\n\n\/\/ D\u016eLE\u017dIT\u00c9: Po zm\u011bn\u011b je nutn\u00fd flush rewrite rules\nflush_rewrite_rules();<\/code><\/pre>\n\n\n\n
                                                                        \n\n\n\n

                                                                        9.4 WP-CLI p\u0159\u00edkazy<\/h3>\n\n\n\n

                                                                        Dostupn\u00e9 p\u0159\u00edkazy:<\/strong><\/p>\n\n\n\n

                                                                        # === Stav HPOS ===\n\n# Zjistit, zda jsou HPOS tabulky aktivn\u00ed\nwp option get woocommerce_custom_orders_table_enabled\n\n# Zjistit po\u010det objedn\u00e1vek v HPOS\nwp db query \"SELECT COUNT(*) FROM wp_wc_orders\"\n\n# Zjistit po\u010det objedn\u00e1vek v posts\nwp db query \"SELECT COUNT(*) FROM wp_posts WHERE post_type='shop_order'\"\n\n# === Migrace ===\n\n# Migrovat objedn\u00e1vky do HPOS (batch)\nwp wc cot sync --batch-size=100\n\n# Ov\u011b\u0159it data po migraci\nwp wc cot verify-cot-data\n\n# Rollback migrace (NEBEZPE\u010cN\u00c9!)\n# Tato funkce nemus\u00ed existovat ve v\u0161ech verz\u00edch\n\n# === N\u00e1stroje ===\n\n# Regenerovat product lookup tabulky\nwp wc tool run regenerate_product_lookup_tables --user=admin\n\n# Vy\u010distit WC cache\nwp wc tool run clear_transients --user=admin\n\n# Vy\u010distit WC session\nwp wc tool run clear_sessions --user=admin\n\n# === Debug ===\n\n# Zjistit pending sync count\nwp eval \"echo wc_get_container()->get( Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\DataSynchronizer::class )->get_total_pending_count();\"\n\n# Zobrazit HPOS config\nwp eval \"\n\\$controller = wc_get_container()->get( Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\CustomOrdersTableController::class );\necho 'HPOS Enabled: ' . ( \\$controller->custom_orders_table_usage_is_enabled() ? 'Yes' : 'No' ) . PHP_EOL;\n\"<\/code><\/pre>\n\n\n\n
                                                                        \n\n\n\n

                                                                        9.5 Konstanty v wp-config.php<\/h3>\n\n\n\n

                                                                        Vynucen\u00ed nastaven\u00ed p\u0159es wp-config:<\/strong><\/p>\n\n\n\n

                                                                        \/\/ wp-config.php\n\n\/\/ === Vynucen\u00ed HPOS m\u00f3du ===\n\n\/\/ Vynucen\u00ed HPOS autoritativn\u00edho (ignoruje admin nastaven\u00ed)\ndefine( 'WC_FORCE_HPOS_ENABLED', true );\n\n\/\/ Vynucen\u00ed Legacy m\u00f3du (zak\u00e1\u017ee HPOS)\ndefine( 'WC_FORCE_HPOS_DISABLED', true );\n\n\/\/ === V\u00fdvoj\u00e1\u0159sk\u00e9 konstanty ===\n\n\/\/ Povolit zm\u011bnu storage b\u011bhem pending sync (NEBEZPE\u010cN\u00c9!)\ndefine( 'WC_ALLOW_CHANGING_ORDERS_STORAGE_WHILE_SYNC_PENDING', true );\n\n\/\/ Debug m\u00f3d pro HPOS\ndefine( 'WC_HPOS_DEBUG', true );\n\n\/\/ Logovat v\u0161echny HPOS operace\ndefine( 'WC_LOG_HPOS_OPERATIONS', true );<\/code><\/pre>\n\n\n\n

                                                                        Pou\u017eit\u00ed:<\/strong><\/p>\n\n\n\n

                                                                        \/\/ V k\u00f3du:\nif ( defined( 'WC_FORCE_HPOS_ENABLED' ) && WC_FORCE_HPOS_ENABLED ) {\n    \/\/ HPOS vynucen p\u0159es wp-config\n}<\/code><\/pre>\n\n\n\n
                                                                        \n\n\n\n

                                                                        9.6 Filter hooks pro customizaci<\/h3>\n\n\n\n
                                                                        \/\/ === Data Store Selection ===\n\n\/\/ Zm\u011bnit data store pro objedn\u00e1vky\nadd_filter( 'woocommerce_order_data_store', function( $store ) {\n    \/\/ Vr\u00e1tit vlastn\u00ed implementaci\n    return 'MyCustomOrderDataStore';\n} );\n\n\/\/ Zm\u011bnit data store pro refundy\nadd_filter( 'woocommerce_order-refund_data_store', function( $store ) {\n    return 'MyCustomRefundDataStore';\n} );\n\n\/\/ === Synchronizace ===\n\n\/\/ Zm\u011bnit batch size pro sync\nadd_filter( 'woocommerce_orders_cot_migration_batch_size', function( $size ) {\n    return 50; \/\/ Default: 100\n} );\n\n\/\/ P\u0159idat custom logiku p\u0159ed synchem\nadd_action( 'woocommerce_before_order_sync_to_posts', function( $order_id ) {\n    \/\/ Custom logika\n}, 10, 1 );\n\n\/\/ P\u0159idat custom logiku po syncu\nadd_action( 'woocommerce_after_order_sync_to_posts', function( $order_id ) {\n    \/\/ Custom logika\n}, 10, 1 );\n\n\/\/ === Migration ===\n\n\/\/ Upravit SQL schema p\u0159ed vytvo\u0159en\u00edm tabulek\nadd_filter( 'woocommerce_orders_table_schema', function( $schema ) {\n    \/\/ P\u0159idat vlastn\u00ed sloupce\/indexy\n    return $schema;\n} );\n\n\/\/ Hook po vytvo\u0159en\u00ed HPOS tabulek\nadd_action( 'woocommerce_after_orders_table_created', function() {\n    \/\/ Custom init logika\n} );\n\n\/\/ === Cache ===\n\n\/\/ Zak\u00e1zat HPOS cache pro konkr\u00e9tn\u00ed objedn\u00e1vku\nadd_filter( 'woocommerce_hpos_cache_order_' . $order_id, '__return_false' );\n\n\/\/ === Full Text Search ===\n\n\/\/ Upravit FTS sloupce\nadd_filter( 'woocommerce_hpos_fts_columns', function( $columns ) {\n    $columns[] = 'custom_column';\n    return $columns;\n} );<\/code><\/pre>\n\n\n\n
                                                                        \n\n\n\n

                                                                        10. Migrace na HPOS<\/h2>\n\n\n\n

                                                                        10.1 P\u0159\u00edprava p\u0159ed migrac\u00ed<\/h3>\n\n\n\n

                                                                        Checklist:<\/strong><\/p>\n\n\n\n

                                                                          \n
                                                                        • [ ] Z\u00e1loha datab\u00e1ze<\/strong> (POVINN\u00c9!)<\/li>\n<\/ul>\n\n\n\n
                                                                            \n
                                                                          • [ ] Aktualizace WooCommerce<\/strong> na nejnov\u011bj\u0161\u00ed verzi<\/li>\n<\/ul>\n\n\n\n
                                                                              \n
                                                                            • [ ] Kontrola kompatibility plugin\u016f<\/strong><\/li>\n<\/ul>\n\n\n\n
                                                                                \n
                                                                              • [ ] Test na staging prost\u0159ed\u00ed<\/strong><\/li>\n<\/ul>\n\n\n\n
                                                                                  \n
                                                                                • [ ] Monitorov\u00e1n\u00ed v\u00fdkonu<\/strong><\/li>\n<\/ul>\n\n\n\n
                                                                                    \n
                                                                                  • [ ] Informovat t\u00fdm<\/strong><\/li>\n<\/ul>\n\n\n\n
                                                                                    \n\n\n\n

                                                                                    10.2 Postup migrace (Doporu\u010den\u00fd)<\/h3>\n\n\n\n

                                                                                    F\u00e1ze 1: Aktivace HPOS v Compatibility m\u00f3du<\/h4>\n\n\n\n

                                                                                    Krok 1.1:<\/strong> Zapnout HPOS v admin<\/p>\n\n\n\n

                                                                                    WooCommerce > Settings > Advanced > Features\n\u2192 Za\u0161krtnout \"Enable the high-performance order storage feature\"\n\u2192 Save changes<\/code><\/pre>\n\n\n\n

                                                                                    V\u00fdsledek:<\/strong><\/p>\n\n\n\n

                                                                                      \n
                                                                                    • HPOS tabulky vytvo\u0159eny<\/li>\n\n\n\n
                                                                                    • Je\u0161t\u011b NEPOU\u017d\u00cdVAN\u00c9 (posts je st\u00e1le autoritativn\u00ed)<\/li>\n<\/ul>\n\n\n\n

                                                                                      Ov\u011b\u0159en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                      wp db query \"SHOW TABLES LIKE 'wp_wc_orders%'\"\n# M\u011blo by vr\u00e1tit:\n# - wp_wc_orders\n# - wp_wc_order_addresses\n# - wp_wc_order_operational_data\n# - wp_wc_orders_meta<\/code><\/pre>\n\n\n\n
                                                                                      \n\n\n\n

                                                                                      F\u00e1ze 2: Spu\u0161t\u011bn\u00ed migrace<\/h4>\n\n\n\n

                                                                                      Krok 2.1:<\/strong> Zapnout Compatibility mode<\/p>\n\n\n\n

                                                                                      WooCommerce > Settings > Advanced > Features\n\u2192 Za\u0161krtnout \"Enable compatibility mode\"\n\u2192 Vybrat \"Interval\" sync mode\n\u2192 Save changes<\/code><\/pre>\n\n\n\n

                                                                                      V\u00fdsledek:<\/strong><\/p>\n\n\n\n

                                                                                        \n
                                                                                      • Spust\u00ed se background migrace<\/li>\n\n\n\n
                                                                                      • Data se za\u010d\u00ednaj\u00ed kop\u00edrovat do HPOS<\/li>\n\n\n\n
                                                                                      • Posts tabulka z\u016fst\u00e1v\u00e1 autoritativn\u00ed<\/li>\n<\/ul>\n\n\n\n

                                                                                        Krok 2.2:<\/strong> Sledovat progress<\/p>\n\n\n\n

                                                                                        WooCommerce > Status > Data Stores<\/code><\/pre>\n\n\n\n

                                                                                        Zobrazuje:<\/strong><\/p>\n\n\n\n

                                                                                        Orders pending sync: 1,234\nOrders in posts table: 10,000\nOrders in HPOS tables: 8,766\nLast sync: 2 minutes ago<\/code><\/pre>\n\n\n\n

                                                                                        CLI monitoring:<\/strong><\/p>\n\n\n\n

                                                                                        # Sledovat progress v re\u00e1ln\u00e9m \u010dase\nwatch -n 10 'wp eval \"\n\\$sync = wc_get_container()->get( Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\DataSynchronizer::class );\necho \\\"Pending: \\\" . \\$sync->get_total_pending_count() . PHP_EOL;\n\"'<\/code><\/pre>\n\n\n\n

                                                                                        \u010casov\u00fd odhad:<\/strong><\/p>\n\n\n\n

                                                                                          \n
                                                                                        • ~100 objedn\u00e1vek\/min (z\u00e1vis\u00ed na serveru)<\/li>\n\n\n\n
                                                                                        • 10,000 objedn\u00e1vek = ~100 minut<\/li>\n\n\n\n
                                                                                        • 100,000 objedn\u00e1vek = ~17 hodin<\/li>\n<\/ul>\n\n\n\n

                                                                                          Tip:<\/strong> Zrychlit migraci zm\u011bnou sync m\u00f3du na „Continuous“ (do\u010dasn\u011b)<\/p>\n\n\n\n


                                                                                          \n\n\n\n

                                                                                          F\u00e1ze 3: Ov\u011b\u0159en\u00ed migrace<\/h4>\n\n\n\n

                                                                                          Krok 3.1:<\/strong> Po\u010dkat, a\u017e pending sync klesne na 0<\/p>\n\n\n\n

                                                                                          WooCommerce > Status > Data Stores\n\u2192 Orders pending sync: 0<\/code><\/pre>\n\n\n\n

                                                                                          Krok 3.2:<\/strong> Ov\u011b\u0159it data<\/p>\n\n\n\n

                                                                                          # Po\u010det objedn\u00e1vek by m\u011bl b\u00fdt stejn\u00fd\nwp db query \"SELECT COUNT(*) as posts_count FROM wp_posts WHERE post_type='shop_order'\"\nwp db query \"SELECT COUNT(*) as hpos_count FROM wp_wc_orders\"<\/code><\/pre>\n\n\n\n

                                                                                          Krok 3.3:<\/strong> Kontrola integrity<\/p>\n\n\n\n

                                                                                          wp wc cot verify-cot-data<\/code><\/pre>\n\n\n\n

                                                                                          O\u010dek\u00e1van\u00fd v\u00fdstup:<\/strong><\/p>\n\n\n\n

                                                                                          Verifying HPOS data integrity...\n All orders migrated\n No missing addresses\n No missing operational data\n Metadata counts match\nSuccess: HPOS data is consistent<\/code><\/pre>\n\n\n\n

                                                                                          Krok 3.4:<\/strong> Manu\u00e1ln\u00ed kontrola<\/p>\n\n\n\n

                                                                                          -- N\u00e1hodn\u00fd vzorek objedn\u00e1vek\nSELECT\n    p.ID as post_id,\n    o.id as hpos_id,\n    p.post_status as post_status,\n    o.status as hpos_status,\n    pm_billing.meta_value as post_email,\n    o.billing_email as hpos_email\nFROM wp_posts p\nLEFT JOIN wp_wc_orders o ON p.ID = o.id\nLEFT JOIN wp_postmeta pm_billing ON p.ID = pm_billing.post_id AND pm_billing.meta_key = '_billing_email'\nWHERE p.post_type = 'shop_order'\nORDER BY RAND()\nLIMIT 10;<\/code><\/pre>\n\n\n\n

                                                                                          O\u010dek\u00e1van\u00fd v\u00fdsledek:<\/strong> V\u0161echny hodnoty by m\u011bly b\u00fdt identick\u00e9<\/p>\n\n\n\n


                                                                                          \n\n\n\n

                                                                                          F\u00e1ze 4: P\u0159epnut\u00ed na HPOS autoritativn\u00ed<\/h4>\n\n\n\n

                                                                                          VAROV\u00c1N\u00cd:<\/strong> Od tohoto kroku je HPOS prim\u00e1rn\u00ed zdroj!<\/p>\n\n\n\n

                                                                                          Krok 4.1:<\/strong> P\u0159epnout autoritativn\u00ed zdroj<\/p>\n\n\n\n

                                                                                          WooCommerce > Settings > Advanced > Features\n\u2192 V sekci \"High-performance order storage\" zm\u011bnit:\n  \"Authoritative data store\" \u2192 \"High-performance order storage\"\n\u2192 Save changes<\/code><\/pre>\n\n\n\n

                                                                                          Nebo CLI:<\/strong><\/p>\n\n\n\n

                                                                                          wp option update woocommerce_custom_orders_table_enabled yes<\/code><\/pre>\n\n\n\n

                                                                                          V\u00fdsledek:<\/strong><\/p>\n\n\n\n

                                                                                            \n
                                                                                          • HPOS je nyn\u00ed prim\u00e1rn\u00ed<\/li>\n\n\n\n
                                                                                          • Zm\u011bny se ukl\u00e1daj\u00ed do HPOS<\/li>\n\n\n\n
                                                                                          • Posts tabulka se aktualizuje v pozad\u00ed (pokud sync ON)<\/li>\n<\/ul>\n\n\n\n

                                                                                            Krok 4.2:<\/strong> Ov\u011b\u0159it switch<\/p>\n\n\n\n

                                                                                            use Automattic\\WooCommerce\\Utilities\\OrderUtil;\n\nif ( OrderUtil::custom_orders_table_usage_is_enabled() ) {\n    echo \" HPOS je autoritativn\u00ed\";\n} else {\n    echo \" St\u00e1le b\u011b\u017e\u00ed Legacy mode\";\n}<\/code><\/pre>\n\n\n\n

                                                                                            Krok 4.3:<\/strong> Test vytvo\u0159en\u00ed objedn\u00e1vky<\/p>\n\n\n\n

                                                                                            1. Vytvo\u0159it test objedn\u00e1vku v adminu\n2. Zkontrolovat, \u017ee je v wp_wc_orders\n3. Zkontrolovat, \u017ee je (pokud sync ON) i v wp_posts<\/code><\/pre>\n\n\n\n
                                                                                            \n\n\n\n

                                                                                            F\u00e1ze 5: Testov\u00e1n\u00ed (kritick\u00e1 f\u00e1ze!)<\/h4>\n\n\n\n

                                                                                            Testovac\u00ed checklist:<\/strong><\/p>\n\n\n\n

                                                                                            Funkcionality k otestov\u00e1n\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                              \n
                                                                                            • [ ] Vytvo\u0159en\u00ed objedn\u00e1vky (checkout)<\/li>\n\n\n\n
                                                                                            • [ ] \u00daprava objedn\u00e1vky v adminu<\/li>\n\n\n\n
                                                                                            • [ ] Zm\u011bna statusu objedn\u00e1vky<\/li>\n\n\n\n
                                                                                            • [ ] P\u0159id\u00e1n\u00ed order note<\/li>\n\n\n\n
                                                                                            • [ ] Vytvo\u0159en\u00ed refundu<\/li>\n\n\n\n
                                                                                            • [ ] Odesl\u00e1n\u00ed email\u016f (order completed, atd.)<\/li>\n\n\n\n
                                                                                            • [ ] Generov\u00e1n\u00ed faktur (pokud plugin)<\/li>\n\n\n\n
                                                                                            • [ ] Export objedn\u00e1vek<\/li>\n\n\n\n
                                                                                            • [ ] WooCommerce Analytics<\/li>\n\n\n\n
                                                                                            • [ ] REST API dotazy<\/li>\n\n\n\n
                                                                                            • [ ] Plugin integrace (payment gateways, shipping, atd.)<\/li>\n<\/ul>\n\n\n\n

                                                                                              CLI testy:<\/strong><\/p>\n\n\n\n

                                                                                              # Test REST API\nwp eval \"\n\\$order = wc_create_order();\n\\$order->set_billing_email('test@test.com');\n\\$order->set_total(100);\n\\$order->save();\necho 'Order ID: ' . \\$order->get_id() . PHP_EOL;\necho 'Table: ' . \\Automattic\\WooCommerce\\Utilities\\OrderUtil::get_table_for_orders() . PHP_EOL;\n\"<\/code><\/pre>\n\n\n\n

                                                                                              Doba testov\u00e1n\u00ed:<\/strong> Minim\u00e1ln\u011b 7 dn\u00ed<\/strong> na produkci s aktivn\u00edm provozem<\/p>\n\n\n\n


                                                                                              \n\n\n\n

                                                                                              F\u00e1ze 6: Vypnut\u00ed synchronizace (voliteln\u00e9)<\/h4>\n\n\n\n

                                                                                              VAROV\u00c1N\u00cd:<\/strong> Po vypnut\u00ed syncu nelze snadno rollbacknout!<\/p>\n\n\n\n

                                                                                              Kdy vypnout sync:<\/strong><\/p>\n\n\n\n

                                                                                                \n
                                                                                              • Po min. 7 dnech bez probl\u00e9m\u016f<\/li>\n\n\n\n
                                                                                              • V\u0161echny pluginy HPOS kompatibiln\u00ed<\/li>\n\n\n\n
                                                                                              • Chcete maxim\u00e1ln\u00ed v\u00fdkon<\/li>\n<\/ul>\n\n\n\n

                                                                                                Krok 6.1:<\/strong> Vypnout compatibility mode<\/p>\n\n\n\n

                                                                                                WooCommerce > Settings > Advanced > Features\n\u2192 Od\u0161krtnout \"Enable compatibility mode\"\n\u2192 Save changes<\/code><\/pre>\n\n\n\n

                                                                                                V\u00fdsledek:<\/strong><\/p>\n\n\n\n

                                                                                                  \n
                                                                                                • Posts tabulka se P\u0158ESTANE aktualizovat<\/li>\n\n\n\n
                                                                                                • Pouze HPOS tabulky jsou pou\u017e\u00edv\u00e1ny<\/li>\n\n\n\n
                                                                                                • ~50% rychlej\u0161\u00ed z\u00e1pis objedn\u00e1vek<\/li>\n<\/ul>\n\n\n\n

                                                                                                  Krok 6.2:<\/strong> Monitorov\u00e1n\u00ed<\/p>\n\n\n\n

                                                                                                    \n
                                                                                                  • Sledovat error logy<\/li>\n\n\n\n
                                                                                                  • Kontrolovat funk\u010dnost plugin\u016f<\/li>\n\n\n\n
                                                                                                  • Ov\u011b\u0159it, \u017ee \u017e\u00e1dn\u00fd plugin nehl\u00e1s\u00ed chyby<\/li>\n<\/ul>\n\n\n\n
                                                                                                    \n\n\n\n

                                                                                                    F\u00e1ze 7: Cleanup (voliteln\u00e9)<\/h4>\n\n\n\n

                                                                                                    VAROV\u00c1N\u00cd:<\/strong> Smaz\u00e1n\u00ed dat z posts je NEVRATN\u00c9!<\/p>\n\n\n\n

                                                                                                    Kdy prov\u00e9st cleanup:<\/strong><\/p>\n\n\n\n

                                                                                                      \n
                                                                                                    • Po min. 30 dnech bez probl\u00e9m\u016f<\/li>\n\n\n\n
                                                                                                    • V\u0161echny syst\u00e9my stabiln\u00ed<\/li>\n\n\n\n
                                                                                                    • M\u00e1te fresh z\u00e1lohu<\/li>\n<\/ul>\n\n\n\n

                                                                                                      Mo\u017enosti:<\/strong><\/p>\n\n\n\n

                                                                                                      A. \u010c\u00e1ste\u010dn\u00fd cleanup<\/strong> (doporu\u010deno)<\/p>\n\n\n\n

                                                                                                      -- Smazat pouze postmeta (ponechat posts)\nDELETE pm FROM wp_postmeta pm\nINNER JOIN wp_posts p ON pm.post_id = p.ID\nWHERE p.post_type = 'shop_order'\n  AND pm.meta_key LIKE '\\_%';\n\n-- U\u0161et\u0159\u00ed: ~60% m\u00edsta\n-- Riziko: N\u00edzk\u00e9 (posts z\u016fst\u00e1vaj\u00ed pro referenci)<\/code><\/pre>\n\n\n\n

                                                                                                      B. \u00dapln\u00fd cleanup<\/strong> (riskantn\u00ed)<\/p>\n\n\n\n

                                                                                                      -- Smazat v\u0161echny order posts\nDELETE FROM wp_posts WHERE post_type = 'shop_order';\nDELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);\n\n-- U\u0161et\u0159\u00ed: ~90% m\u00edsta\n-- Riziko: Vysok\u00e9 (nelze vr\u00e1tit bez z\u00e1lohy)<\/code><\/pre>\n\n\n\n

                                                                                                      CLI cleanup:<\/strong><\/p>\n\n\n\n

                                                                                                      # NEBEZPE\u010cN\u00c9! Prov\u00e9st pouze s fresh z\u00e1lohou!\nwp db query \"\nDELETE p, pm\nFROM wp_posts p\nLEFT JOIN wp_postmeta pm ON p.ID = pm.post_id\nWHERE p.post_type = 'shop_order'\n\"<\/code><\/pre>\n\n\n\n

                                                                                                      Po cleanup:<\/strong><\/p>\n\n\n\n

                                                                                                        \n
                                                                                                      • Optimalizovat tabulky<\/li>\n<\/ul>\n\n\n\n
                                                                                                        \n\n\n\n

                                                                                                        10.3 Rollback pl\u00e1n<\/h3>\n\n\n\n

                                                                                                        Kdy\u017e rollbacknout:<\/strong><\/p>\n\n\n\n

                                                                                                          \n
                                                                                                        • V\u00e1\u017en\u00e9 chyby v HPOS m\u00f3du<\/li>\n\n\n\n
                                                                                                        • Nekompatibiln\u00ed pluginy<\/li>\n\n\n\n
                                                                                                        • V\u00fdkonnostn\u00ed probl\u00e9my<\/li>\n<\/ul>\n\n\n\n

                                                                                                          Rollback z F\u00e1ze 4-5 (HPOS autoritativn\u00ed)<\/h4>\n\n\n\n

                                                                                                          Krok 1:<\/strong> P\u0159epnout zp\u011bt na Legacy<\/p>\n\n\n\n

                                                                                                          WooCommerce > Settings > Advanced > Features\n\u2192 \"Authoritative data store\" \u2192 \"WordPress posts storage\"\n\u2192 Save changes<\/code><\/pre>\n\n\n\n

                                                                                                          Nebo CLI:<\/strong><\/p>\n\n\n\n

                                                                                                          wp option update woocommerce_custom_orders_table_enabled no<\/code><\/pre>\n\n\n\n

                                                                                                          Krok 2:<\/strong> Ov\u011b\u0159it sync<\/p>\n\n\n\n

                                                                                                          # Po\u010dkat, a\u017e pending sync klesne na 0\nwp eval \"\n\\$sync = wc_get_container()->get( Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\DataSynchronizer::class );\necho \\$sync->get_total_pending_count();\n\"<\/code><\/pre>\n\n\n\n

                                                                                                          Krok 3:<\/strong> Testovat<\/p>\n\n\n\n

                                                                                                            \n
                                                                                                          • Vytvo\u0159it test objedn\u00e1vku<\/li>\n\n\n\n
                                                                                                          • Ov\u011b\u0159it, \u017ee je v wp_posts<\/code><\/li>\n<\/ul>\n\n\n\n

                                                                                                            Rollback z F\u00e1ze 6 (Sync vypnut\u00fd)<\/h4>\n\n\n\n

                                                                                                            Probl\u00e9m:<\/strong> Sync vypnut\u00fd = posts tabulka je zastaral\u00e1!<\/p>\n\n\n\n

                                                                                                            \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                            Krok 1:<\/strong> Zapnout sync<\/p>\n\n\n\n

                                                                                                            wp option update woocommerce_custom_orders_table_data_sync_enabled yes<\/code><\/pre>\n\n\n\n

                                                                                                            Krok 2:<\/strong> Reverse sync (HPOS \u2192 Posts)<\/p>\n\n\n\n

                                                                                                            # Tento p\u0159\u00edkaz nemus\u00ed existovat v aktu\u00e1ln\u00ed verzi WC!\n# M\u016f\u017ee b\u00fdt nutn\u00e9 vytvo\u0159it custom script\nwp wc cot sync --direction=to-posts<\/code><\/pre>\n\n\n\n

                                                                                                            Krok 3:<\/strong> Po\u010dkat na dokon\u010den\u00ed syncu<\/p>\n\n\n\n

                                                                                                            Krok 4:<\/strong> P\u0159epnout na Legacy<\/p>\n\n\n\n

                                                                                                            wp option update woocommerce_custom_orders_table_enabled no<\/code><\/pre>\n\n\n\n

                                                                                                            \u00dapln\u00fd rollback (s obnovou ze z\u00e1lohy)<\/h4>\n\n\n\n

                                                                                                            Nejspolehliv\u011bj\u0161\u00ed metoda:<\/strong><\/p>\n\n\n\n

                                                                                                            # 1. Zastavit web (maintenance mode)\nwp maintenance-mode activate\n\n# 2. Obnovit datab\u00e1zi ze z\u00e1lohy\nwp db import backup-before-hpos.sql\n\n# 3. Zak\u00e1zat HPOS\nwp option delete woocommerce_custom_orders_table_enabled\nwp option delete woocommerce_custom_orders_table_data_sync_enabled\n\n# 4. Vymazat HPOS tabulky (voliteln\u00e9)\nwp db query \"DROP TABLE IF EXISTS wp_wc_orders\"\nwp db query \"DROP TABLE IF EXISTS wp_wc_order_addresses\"\nwp db query \"DROP TABLE IF EXISTS wp_wc_order_operational_data\"\nwp db query \"DROP TABLE IF EXISTS wp_wc_orders_meta\"\n\n# 5. Flush cache\nwp cache flush\n\n# 6. Reaktivovat web\nwp maintenance-mode deactivate<\/code><\/pre>\n\n\n\n
                                                                                                            \n\n\n\n

                                                                                                            10.4 Troubleshooting migrace<\/h3>\n\n\n\n

                                                                                                            Probl\u00e9m 1: Migrace zamrzne<\/h4>\n\n\n\n

                                                                                                            Symptomy:<\/strong><\/p>\n\n\n\n

                                                                                                              \n
                                                                                                            • Pending sync neub\u00fdv\u00e1<\/li>\n\n\n\n
                                                                                                            • Status > Data Stores ukazuje stejn\u00e9 \u010d\u00edslo hodiny<\/li>\n<\/ul>\n\n\n\n

                                                                                                              Diagnostika:<\/strong><\/p>\n\n\n\n

                                                                                                              # Zkontrolovat cron\nwp cron event list | grep woocommerce\n\n# Zkontrolovat error log\ntail -f \/path\/to\/wp-content\/debug.log<\/code><\/pre>\n\n\n\n

                                                                                                              \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                              A. Restart WP Cron<\/strong><\/p>\n\n\n\n

                                                                                                              wp cron event run --all<\/code><\/pre>\n\n\n\n

                                                                                                              B. Manu\u00e1ln\u00ed sync batch<\/strong><\/p>\n\n\n\n

                                                                                                              wp wc cot sync --batch-size=50<\/code><\/pre>\n\n\n\n

                                                                                                              C. Zm\u011bnit sync mode na Continuous<\/strong> (do\u010dasn\u011b)<\/p>\n\n\n\n

                                                                                                              wp option update woocommerce_custom_orders_table_background_sync_mode continuous<\/code><\/pre>\n\n\n\n

                                                                                                              Probl\u00e9m 2: Nekonzistentn\u00ed data<\/h4>\n\n\n\n

                                                                                                              Symptomy:<\/strong><\/p>\n\n\n\n

                                                                                                                \n
                                                                                                              • R\u016fzn\u00e9 po\u010dty objedn\u00e1vek v posts vs HPOS<\/li>\n\n\n\n
                                                                                                              • Missing objedn\u00e1vky<\/li>\n<\/ul>\n\n\n\n

                                                                                                                Diagnostika:<\/strong><\/p>\n\n\n\n

                                                                                                                -- Objedn\u00e1vky v posts, ale ne v HPOS\nSELECT p.ID\nFROM wp_posts p\nLEFT JOIN wp_wc_orders o ON p.ID = o.id\nWHERE p.post_type = 'shop_order'\n  AND o.id IS NULL;\n\n-- Objedn\u00e1vky v HPOS, ale ne v posts\nSELECT o.id\nFROM wp_wc_orders o\nLEFT JOIN wp_posts p ON o.id = p.ID\nWHERE p.ID IS NULL;<\/code><\/pre>\n\n\n\n

                                                                                                                \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                # Re-sync specific orders\nwp eval \"\n\\$order_ids = [12345, 12346, 12347];\n\\$sync = wc_get_container()->get( Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\DataSynchronizer::class );\n\\$sync->process_batch( \\$order_ids );\n\"<\/code><\/pre>\n\n\n\n

                                                                                                                Probl\u00e9m 3: Chyb\u011bj\u00edc\u00ed adresy<\/h4>\n\n\n\n

                                                                                                                Symptomy:<\/strong><\/p>\n\n\n\n

                                                                                                                  \n
                                                                                                                • Pr\u00e1zdn\u00e9 billing\/shipping fields v HPOS<\/li>\n<\/ul>\n\n\n\n

                                                                                                                  Diagnostika:<\/strong><\/p>\n\n\n\n

                                                                                                                  -- Objedn\u00e1vky bez adres\nSELECT o.id, o.billing_email\nFROM wp_wc_orders o\nLEFT JOIN wp_wc_order_addresses a ON o.id = a.order_id\nWHERE a.id IS NULL;<\/code><\/pre>\n\n\n\n

                                                                                                                  \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                  # Re-migrate addresses\nwp eval \"\n\\$order_ids = [12345]; \/\/ IDs with missing addresses\nforeach ( \\$order_ids as \\$order_id ) {\n    \\$order = wc_get_order( \\$order_id );\n    if ( \\$order ) {\n        \\$order->save(); \/\/ Triggers address sync\n    }\n}\n\"<\/code><\/pre>\n\n\n\n

                                                                                                                  Probl\u00e9m 4: DB lock timeout<\/h4>\n\n\n\n

                                                                                                                  Symptomy:<\/strong><\/p>\n\n\n\n

                                                                                                                  Error: Lock wait timeout exceeded; try restarting transaction<\/code><\/pre>\n\n\n\n

                                                                                                                  P\u0159\u00ed\u010dina:<\/strong> Velk\u00fd objem concurrent transakc\u00ed<\/p>\n\n\n\n

                                                                                                                  \u0158e\u0161en\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                  A. Zv\u00fd\u0161it DB timeout<\/strong><\/p>\n\n\n\n

                                                                                                                  SET GLOBAL innodb_lock_wait_timeout = 120; -- Default 50<\/code><\/pre>\n\n\n\n

                                                                                                                  B. Sn\u00ed\u017eit batch size<\/strong><\/p>\n\n\n\n

                                                                                                                  wp option update woocommerce_orders_cot_migration_batch_size 25<\/code><\/pre>\n\n\n\n

                                                                                                                  C. Vypnout transakce<\/strong> (posledn\u00ed \u0159e\u0161en\u00ed)<\/p>\n\n\n\n

                                                                                                                  wp option update woocommerce_use_db_transactions_for_custom_orders_table_data_sync no<\/code><\/pre>\n\n\n\n
                                                                                                                  \n\n\n\n

                                                                                                                  11. V\u00fdkonnostn\u00ed charakteristiky<\/h2>\n\n\n\n

                                                                                                                  11.1 Benchmark v\u00fdsledky<\/h3>\n\n\n\n

                                                                                                                  Testovac\u00ed prost\u0159ed\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                    \n
                                                                                                                  • 10,000 objedn\u00e1vek<\/li>\n\n\n\n
                                                                                                                  • WordPress 6.4<\/li>\n\n\n\n
                                                                                                                  • WooCommerce 8.4+<\/li>\n\n\n\n
                                                                                                                  • MySQL 8.0<\/li>\n\n\n\n
                                                                                                                  • PHP 8.1<\/li>\n<\/ul>\n\n\n\n

                                                                                                                    Test 1: Na\u010dten\u00ed jedn\u00e9 objedn\u00e1vky<\/h4>\n\n\n\n
                                                                                                                    \/\/ Legacy (Posts)\n$start = microtime(true);\n$order = wc_get_order(12345);\n$email = $order->get_billing_email();\n$total = $order->get_total();\n$time_legacy = microtime(true) - $start;\n\/\/ \u010cas: ~25ms\n\n\/\/ HPOS\n$start = microtime(true);\n$order = wc_get_order(12345);\n$email = $order->get_billing_email();\n$total = $order->get_total();\n$time_hpos = microtime(true) - $start;\n\/\/ \u010cas: ~8ms\n\n\/\/ Zrychlen\u00ed: 3.1x<\/code><\/pre>\n\n\n\n

                                                                                                                    SQL dotazy:<\/strong><\/p>\n\n\n\n

                                                                                                                    Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                    -- 1. Na\u010d\u00edst post\nSELECT * FROM wp_posts WHERE ID = 12345 AND post_type = 'shop_order';\n\n-- 2. Na\u010d\u00edst v\u0161echny metadata (50-100 \u0159\u00e1dk\u016f)\nSELECT meta_key, meta_value FROM wp_postmeta WHERE post_id = 12345;\n\n-- Celkem: 2 dotazy, ~100 \u0159\u00e1dk\u016f<\/code><\/pre>\n\n\n\n

                                                                                                                    HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                    -- 1. Na\u010d\u00edst z\u00e1kladn\u00ed data\nSELECT * FROM wp_wc_orders WHERE id = 12345;\n\n-- 2. Na\u010d\u00edst adresy (2 \u0159\u00e1dky)\nSELECT * FROM wp_wc_order_addresses WHERE order_id = 12345;\n\n-- 3. Na\u010d\u00edst opera\u010dn\u00ed data (1 \u0159\u00e1dek)\nSELECT * FROM wp_wc_order_operational_data WHERE order_id = 12345;\n\n-- 4. Na\u010d\u00edst metadata (pouze custom, 0-10 \u0159\u00e1dk\u016f)\nSELECT meta_key, meta_value FROM wp_wc_orders_meta WHERE order_id = 12345;\n\n-- Celkem: 4 dotazy, ~13 \u0159\u00e1dk\u016f<\/code><\/pre>\n\n\n\n

                                                                                                                    Z\u00e1v\u011br:<\/strong> HPOS rychlej\u0161\u00ed d\u00edky men\u0161\u00edmu objemu dat, i p\u0159es v\u00edce dotaz\u016f<\/p>\n\n\n\n


                                                                                                                    \n\n\n\n

                                                                                                                    Test 2: Listing 20 objedn\u00e1vek<\/h4>\n\n\n\n
                                                                                                                    \/\/ Legacy\n$orders = wc_get_orders([\n    'limit' => 20,\n    'orderby' => 'date',\n    'order' => 'DESC',\n]);\n\/\/ \u010cas: ~180ms\n\n\/\/ HPOS\n$orders = wc_get_orders([\n    'limit' => 20,\n    'orderby' => 'date',\n    'order' => 'DESC',\n]);\n\/\/ \u010cas: ~45ms\n\n\/\/ Zrychlen\u00ed: 4x<\/code><\/pre>\n\n\n\n

                                                                                                                    Explain anal\u00fdza:<\/strong><\/p>\n\n\n\n

                                                                                                                    Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                    EXPLAIN SELECT p.ID\nFROM wp_posts p\nWHERE p.post_type = 'shop_order'\nORDER BY p.post_date DESC\nLIMIT 20;\n\n-- type: ref\n-- rows: 10,000 (full scan)\n-- Extra: Using where; Using filesort<\/code><\/pre>\n\n\n\n

                                                                                                                    HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                    EXPLAIN SELECT id\nFROM wp_wc_orders\nORDER BY date_created_gmt DESC\nLIMIT 20;\n\n-- type: index\n-- rows: 20 (limit optimized)\n-- Extra: Using index\n-- Key: date_created (dedicated index)<\/code><\/pre>\n\n\n\n
                                                                                                                    \n\n\n\n

                                                                                                                    Test 3: Vyhled\u00e1v\u00e1n\u00ed podle emailu<\/h4>\n\n\n\n
                                                                                                                    \/\/ Legacy\n$orders = wc_get_orders([\n    'billing_email' => 'customer@example.com',\n]);\n\/\/ \u010cas: ~420ms (10k objedn\u00e1vek)\n\n\/\/ HPOS\n$orders = wc_get_orders([\n    'billing_email' => 'customer@example.com',\n]);\n\/\/ \u010cas: ~12ms\n\n\/\/ Zrychlen\u00ed: 35x (!!)<\/code><\/pre>\n\n\n\n

                                                                                                                    SQL:<\/strong><\/p>\n\n\n\n

                                                                                                                    Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                    -- Pomal\u00fd meta JOIN\nSELECT p.ID\nFROM wp_posts p\nINNER JOIN wp_postmeta pm ON p.ID = pm.post_id\nWHERE p.post_type = 'shop_order'\n  AND pm.meta_key = '_billing_email'\n  AND pm.meta_value = 'customer@example.com';\n\n-- EXPLAIN:\n-- type: ALL (full table scan na postmeta!)\n-- rows: 150,000+ (v\u0161echny postmeta z\u00e1znamy)<\/code><\/pre>\n\n\n\n

                                                                                                                    HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                    -- P\u0159\u00edm\u00fd index lookup\nSELECT id\nFROM wp_wc_orders\nWHERE billing_email = 'customer@example.com';\n\n-- EXPLAIN:\n-- type: ref\n-- rows: ~5 (pouze matching rows)\n-- Key: billing_email (dedicated index)<\/code><\/pre>\n\n\n\n
                                                                                                                    \n\n\n\n

                                                                                                                    Test 4: Filtrov\u00e1n\u00ed podle statusu a data<\/h4>\n\n\n\n
                                                                                                                    \/\/ Legacy\n$orders = wc_get_orders([\n    'status' => 'completed',\n    'date_created' => '>=' . strtotime('-30 days'),\n    'limit' => -1,\n]);\n\/\/ \u010cas: ~850ms\n\n\/\/ HPOS\n$orders = wc_get_orders([\n    'status' => 'completed',\n    'date_created' => '>=' . strtotime('-30 days'),\n    'limit' => -1,\n]);\n\/\/ \u010cas: ~95ms\n\n\/\/ Zrychlen\u00ed: 9x<\/code><\/pre>\n\n\n\n

                                                                                                                    HPOS v\u00fdhoda:<\/strong><\/p>\n\n\n\n

                                                                                                                      \n
                                                                                                                    • Composite index type_status_date<\/code> perfektn\u011b optimalizovan\u00fd pro tento pattern<\/li>\n\n\n\n
                                                                                                                    • \u017d\u00e1dn\u00e9 meta JOINy<\/li>\n<\/ul>\n\n\n\n
                                                                                                                      \n\n\n\n

                                                                                                                      Test 5: Aktualizace objedn\u00e1vky<\/h4>\n\n\n\n
                                                                                                                      \/\/ Legacy (bez sync)\n$order = wc_get_order(12345);\n$order->set_status('completed');\n$order->save();\n\/\/ \u010cas: ~35ms\n\n\/\/ HPOS (bez sync)\n$order = wc_get_order(12345);\n$order->set_status('completed');\n$order->save();\n\/\/ \u010cas: ~18ms\n\n\/\/ Zrychlen\u00ed: 1.9x\n\n\/\/ HPOS (s synchem)\n\/\/ \u010cas: ~55ms (pomalej\u0161\u00ed kv\u016fli dual write!)<\/code><\/pre>\n\n\n\n

                                                                                                                      Doporu\u010den\u00ed:<\/strong> Po stabilizaci HPOS vypnout sync pro maxim\u00e1ln\u00ed v\u00fdkon<\/p>\n\n\n\n


                                                                                                                      \n\n\n\n

                                                                                                                      11.2 Srovn\u00e1vac\u00ed tabulka<\/h3>\n\n\n\n
                                                                                                                      Operace<\/th>Legacy<\/th>HPOS (sync ON)<\/th>HPOS (sync OFF)<\/th>Zrychlen\u00ed<\/th><\/tr><\/thead>
                                                                                                                      Na\u010dten\u00ed 1 objedn\u00e1vky<\/strong><\/td>25ms<\/td>12ms<\/td>8ms<\/td>3.1x<\/td><\/tr>
                                                                                                                      Listing 20 objedn\u00e1vek<\/strong><\/td>180ms<\/td>60ms<\/td>45ms<\/td>4x<\/td><\/tr>
                                                                                                                      Vyhled\u00e1n\u00ed podle emailu<\/strong><\/td>420ms<\/td>18ms<\/td>12ms<\/td>35x<\/td><\/tr>
                                                                                                                      Filter status + datum<\/strong><\/td>850ms<\/td>120ms<\/td>95ms<\/td>9x<\/td><\/tr>
                                                                                                                      Aktualizace objedn\u00e1vky<\/strong><\/td>35ms<\/td>55ms<\/td>18ms<\/td>1.9x<\/td><\/tr>
                                                                                                                      Vytvo\u0159en\u00ed objedn\u00e1vky<\/strong><\/td>120ms<\/td>180ms<\/td>85ms<\/td>1.4x<\/td><\/tr>
                                                                                                                      Admin order listing (paginated)<\/strong><\/td>650ms<\/td>180ms<\/td>120ms<\/td>5.4x<\/td><\/tr>
                                                                                                                      WC Analytics dashboard<\/strong><\/td>2,500ms<\/td>850ms<\/td>600ms<\/td>4.2x<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

                                                                                                                      Shrnut\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                        \n
                                                                                                                      • Read operace:<\/strong> 3-35x rychlej\u0161\u00ed<\/li>\n\n\n\n
                                                                                                                      • Write operace:<\/strong><\/li>\n\n\n\n
                                                                                                                      • Admin UI:<\/strong> 4-5x rychlej\u0161\u00ed<\/li>\n<\/ul>\n\n\n\n
                                                                                                                        \n\n\n\n

                                                                                                                        11.3 Velikost datab\u00e1ze<\/h3>\n\n\n\n

                                                                                                                        10,000 objedn\u00e1vek:<\/strong><\/p>\n\n\n\n

                                                                                                                        Tabulka<\/th>Legacy<\/th>HPOS<\/th><\/tr><\/thead>
                                                                                                                        wp_posts (orders)<\/td>15 MB<\/td>0 MB (nebo 2 MB pokud sync)<\/td><\/tr>
                                                                                                                        wp_postmeta (order meta)<\/td>180 MB<\/td>0 MB (nebo 50 MB pokud sync)<\/td><\/tr>
                                                                                                                        wp_wc_orders<\/td>–<\/td>8 MB<\/td><\/tr>
                                                                                                                        wp_wc_order_addresses<\/td>–<\/td>12 MB<\/td><\/tr>
                                                                                                                        wp_wc_order_operational_data<\/td>–<\/td>5 MB<\/td><\/tr>
                                                                                                                        wp_wc_orders_meta<\/td>–<\/td>25 MB<\/td><\/tr>
                                                                                                                        Celkem<\/strong><\/td>195 MB<\/strong><\/td>50 MB<\/strong> (74% \u00faspora!)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n

                                                                                                                        S sync ON:<\/strong> ~145 MB (26% \u00faspora)<\/p>\n\n\n\n

                                                                                                                        Bez sync:<\/strong> ~50 MB (74% \u00faspora)<\/p>\n\n\n\n


                                                                                                                        \n\n\n\n

                                                                                                                        11.4 \u0160k\u00e1lovatelnost<\/h3>\n\n\n\n

                                                                                                                        Testov\u00e1no na:<\/strong><\/p>\n\n\n\n

                                                                                                                        100,000 objedn\u00e1vek<\/h4>\n\n\n\n

                                                                                                                        Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                          \n
                                                                                                                        • Admin order listing: 5-8 sekund<\/strong><\/li>\n\n\n\n
                                                                                                                        • Vyhled\u00e1v\u00e1n\u00ed: 2-4 sekundy<\/strong><\/li>\n\n\n\n
                                                                                                                        • Datab\u00e1ze: ~2 GB<\/strong><\/li>\n\n\n\n
                                                                                                                        • RAM usage (PHP): 256 MB<\/strong> pro admin<\/li>\n<\/ul>\n\n\n\n

                                                                                                                          HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                            \n
                                                                                                                          • Admin order listing: 800ms – 1.5s<\/strong><\/li>\n\n\n\n
                                                                                                                          • Vyhled\u00e1v\u00e1n\u00ed: 50-150ms<\/strong><\/li>\n\n\n\n
                                                                                                                          • Datab\u00e1ze: ~500 MB<\/strong><\/li>\n\n\n\n
                                                                                                                          • RAM usage (PHP): 128 MB<\/strong> pro admin<\/li>\n<\/ul>\n\n\n\n

                                                                                                                            Zrychlen\u00ed:<\/strong> 6-8x<\/p>\n\n\n\n

                                                                                                                            1,000,000 objedn\u00e1vek<\/h4>\n\n\n\n

                                                                                                                            Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                              \n
                                                                                                                            • Nepou\u017eiteln\u00e9<\/strong> (timeouty, out of memory)<\/li>\n\n\n\n
                                                                                                                            • Vy\u017eaduje custom indexy a pagination<\/li>\n<\/ul>\n\n\n\n

                                                                                                                              HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                                \n
                                                                                                                              • Admin order listing: 1.5-3 sekundy<\/strong><\/li>\n\n\n\n
                                                                                                                              • Vyhled\u00e1v\u00e1n\u00ed: 150-300ms<\/strong><\/li>\n\n\n\n
                                                                                                                              • Datab\u00e1ze: ~5 GB<\/strong><\/li>\n\n\n\n
                                                                                                                              • \u0160k\u00e1luje line\u00e1rn\u011b<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                Z\u00e1v\u011br:<\/strong> HPOS jedin\u00e9 \u0159e\u0161en\u00ed pro vysokoobjemov\u00e9 obchody<\/p>\n\n\n\n


                                                                                                                                \n\n\n\n

                                                                                                                                11.5 Cache efektivita<\/h3>\n\n\n\n

                                                                                                                                Object Cache (Redis\/Memcached):<\/strong><\/p>\n\n\n\n

                                                                                                                                Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                                \/\/ Cache key obsahuje serialized postmeta array\n\/\/ \u2192 Velk\u00e1 velikost cache entri\u00ed\n\/\/ \u2192 Hor\u0161\u00ed hit rate\nCache size per order: ~15 KB<\/code><\/pre>\n\n\n\n

                                                                                                                                HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                                \/\/ Cache key obsahuje pouze strukturovan\u00e1 data\n\/\/ \u2192 Men\u0161\u00ed cache entries\n\/\/ \u2192 Lep\u0161\u00ed hit rate\nCache size per order: ~3 KB<\/code><\/pre>\n\n\n\n

                                                                                                                                V\u00fdsledek:<\/strong> HPOS m\u00e1 80% cache hit rate vs 55% u Legacy<\/p>\n\n\n\n


                                                                                                                                \n\n\n\n

                                                                                                                                11.6 Index pokryt\u00ed<\/h3>\n\n\n\n

                                                                                                                                Legacy posts tabulka:<\/strong><\/p>\n\n\n\n

                                                                                                                                -- Indexy na wp_posts\nPRIMARY KEY (ID)\nKEY type_status_date (post_type, post_status, post_date, ID)\nKEY post_parent (post_parent)\nKEY post_author (post_author)\n\n-- Probl\u00e9m: post_status obsahuje 'wc-' prefix\n-- \u2192 Sni\u017euje efektivitu indexu<\/code><\/pre>\n\n\n\n

                                                                                                                                HPOS:<\/strong><\/p>\n\n\n\n

                                                                                                                                -- Indexy na wp_wc_orders (optimalizovan\u00e9!)\nPRIMARY KEY (id)\nKEY status (status)                          -- \u010cist\u00fd status\nKEY date_created (date_created_gmt)         -- GMT pro konzistenci\nKEY customer_id_billing_email (customer_id, billing_email(100))  -- Composite\nKEY billing_email (billing_email(100))      -- Email search\nKEY type_status_date (type, status, date_created_gmt)  -- Multi-filter\nKEY parent_order_id (parent_order_id)       -- Refunds\nKEY date_updated (date_updated_gmt)         -- Sync<\/code><\/pre>\n\n\n\n

                                                                                                                                Pokryt\u00ed:<\/strong><\/p>\n\n\n\n

                                                                                                                                  \n
                                                                                                                                • Legacy: ~60% dotaz\u016f pou\u017e\u00edv\u00e1 index<\/li>\n\n\n\n
                                                                                                                                • HPOS: ~95% dotaz\u016f pou\u017e\u00edv\u00e1 optim\u00e1ln\u00ed index<\/li>\n<\/ul>\n\n\n\n
                                                                                                                                  \n\n\n\n

                                                                                                                                  11.7 Doporu\u010den\u00ed pro v\u00fdkon<\/h3>\n\n\n\n

                                                                                                                                  Pro mal\u00e9 obchody (<1,000 objedn\u00e1vek\/m\u011bs\u00edc):<\/strong><\/p>\n\n\n\n

                                                                                                                                    \n
                                                                                                                                  • HPOS p\u0159in\u00e1\u0161\u00ed men\u0161\u00ed benefit<\/li>\n\n\n\n
                                                                                                                                  • Zva\u017ete z\u016fstat na Legacy (jednodu\u0161\u0161\u00ed)<\/li>\n\n\n\n
                                                                                                                                  • Nebo HPOS + sync ON (pro budouc\u00ed \u0161k\u00e1lov\u00e1n\u00ed)<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                    Pro st\u0159edn\u00ed obchody (1,000-10,000 objedn\u00e1vek\/m\u011bs\u00edc):<\/strong><\/p>\n\n\n\n

                                                                                                                                      \n
                                                                                                                                    • HPOS velmi doporu\u010den\u00fd<\/li>\n\n\n\n
                                                                                                                                    • Sync ON prvn\u00edch 30 dn\u00ed<\/li>\n\n\n\n
                                                                                                                                    • Pak sync OFF pro maxim\u00e1ln\u00ed v\u00fdkon<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                      Pro velk\u00e9 obchody (>10,000 objedn\u00e1vek\/m\u011bs\u00edc):<\/strong><\/p>\n\n\n\n

                                                                                                                                        \n
                                                                                                                                      • HPOS POVINN\u00dd<\/strong> (Legacy \u0161k\u00e1luje \u0161patn\u011b)<\/li>\n\n\n\n
                                                                                                                                      • Sync OFF po stabilizaci<\/li>\n\n\n\n
                                                                                                                                      • Zva\u017ete dedicated MySQL server<\/li>\n\n\n\n
                                                                                                                                      • Implementujte external object cache (Redis)<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                        Pro enterprise (>100,000 objedn\u00e1vek\/m\u011bs\u00edc):<\/strong><\/p>\n\n\n\n

                                                                                                                                          \n
                                                                                                                                        • HPOS + MySQL read replicas<\/li>\n\n\n\n
                                                                                                                                        • HPOS + sharding (custom implementace)<\/li>\n\n\n\n
                                                                                                                                        • Full Text Search indexy zapnut\u00e9<\/li>\n\n\n\n
                                                                                                                                        • Aggressive caching strategie<\/li>\n<\/ul>\n\n\n\n
                                                                                                                                          \n\n\n\n

                                                                                                                                          Z\u00e1v\u011br<\/h2>\n\n\n\n

                                                                                                                                          HPOS (High-Performance Order Storage) p\u0159edstavuje z\u00e1sadn\u00ed evoluci WooCommerce datab\u00e1zov\u00e9 architektury. P\u0159echod z generic WordPress posts syst\u00e9mu na dedikovan\u00e9, normalizovan\u00e9 tabulky p\u0159in\u00e1\u0161\u00ed:<\/p>\n\n\n\n

                                                                                                                                          Hlavn\u00ed v\u00fdhody:<\/strong><\/p>\n\n\n\n

                                                                                                                                            \n
                                                                                                                                          • 70-90% rychlej\u0161\u00ed read operace<\/li>\n\n\n\n
                                                                                                                                          • 40% men\u0161\u00ed datab\u00e1ze<\/li>\n\n\n\n
                                                                                                                                          • Line\u00e1rn\u00ed \u0161k\u00e1lovatelnost<\/li>\n\n\n\n
                                                                                                                                          • Modern\u00ed SQL design s optim\u00e1ln\u00edmi indexy<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                            Kl\u00ed\u010dov\u00e9 komponenty:<\/strong><\/p>\n\n\n\n

                                                                                                                                              \n
                                                                                                                                            • 4 hlavn\u00ed HPOS tabulky (orders, addresses, operational_data, meta)<\/li>\n\n\n\n
                                                                                                                                            • 5+ lookup tabulek pro analytics<\/li>\n\n\n\n
                                                                                                                                            • Robustn\u00ed synchroniza\u010dn\u00ed mechanismus<\/li>\n\n\n\n
                                                                                                                                            • \u00dapln\u00e1 zp\u011btn\u00e1 kompatibilita p\u0159es compatibility mode<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                              Doporu\u010den\u00fd postup migrace:<\/strong><\/p>\n\n\n\n

                                                                                                                                                \n
                                                                                                                                              1. Backup datab\u00e1ze<\/li>\n\n\n\n
                                                                                                                                              2. Test na staging<\/li>\n\n\n\n
                                                                                                                                              3. Aktivace HPOS s compatibility mode<\/li>\n\n\n\n
                                                                                                                                              4. Background migrace (automatick\u00e1)<\/li>\n\n\n\n
                                                                                                                                              5. Testov\u00e1n\u00ed (min. 7 dn\u00ed)<\/li>\n\n\n\n
                                                                                                                                              6. P\u0159epnut\u00ed na HPOS autoritativn\u00ed<\/li>\n\n\n\n
                                                                                                                                              7. Vypnut\u00ed syncu (voliteln\u00e9, po 30 dnech)<\/li>\n<\/ol>\n\n\n\n

                                                                                                                                                Z\u00e1sadn\u00ed zm\u011bny oproti Legacy:<\/strong><\/p>\n\n\n\n

                                                                                                                                                  \n
                                                                                                                                                • Adresy v dedikovan\u00e9 tabulce (ne postmeta)<\/li>\n\n\n\n
                                                                                                                                                • Opera\u010dn\u00ed data strukturovan\u00e1 (ne meta key-value)<\/li>\n\n\n\n
                                                                                                                                                • Internal metadata jako sloupce (ne v meta tabulce)<\/li>\n\n\n\n
                                                                                                                                                • GMT timezone pro v\u0161echny timestampy<\/li>\n\n\n\n
                                                                                                                                                • \u017d\u00e1dn\u00fd ‚wc-‚ prefix ve statusech<\/li>\n<\/ul>\n\n\n\n

                                                                                                                                                  HPOS je nyn\u00ed production-ready<\/strong> a doporu\u010den\u00fd pro v\u0161echny nov\u00e9 i existuj\u00edc\u00ed obchody. Kompatibilita s WordPress ekosyst\u00e9mem je zaji\u0161t\u011bna p\u0159es sync mechanismus, kter\u00fd lze bezpe\u010dn\u011b vypnout po stabilizaci syst\u00e9mu.<\/p>\n","protected":false},"excerpt":{"rendered":"

                                                                                                                                                  WooCommerce HPOS – High-Performance Order Storage Obsah 1. \u00davod do HPOS HPOS (High-Performance Order Storage) 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. 1.1 Pro\u010d HPOS? Probl\u00e9my p\u016fvodn\u00edho syst\u00e9mu: V\u00fdhody HPOS: 1.2 Souborov\u00e1 struktura v k\u00f3du Hlavn\u00ed implementa\u010dn\u00ed soubory: 2. HPOS Datab\u00e1zov\u00e9 tabulky HPOS pou\u017e\u00edv\u00e1 4 hlavn\u00ed<\/p>\n","protected":false},"author":1,"featured_media":10688,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_uag_custom_page_level_css":"","footnotes":""},"categories":[25],"tags":[],"class_list":["post-10681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-woocommerce"],"acf":[],"uagb_featured_image_src":{"full":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos.png",900,600,false],"thumbnail":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos-150x150.png",150,150,true],"medium":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos-300x200.png",300,200,true],"medium_large":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos-768x512.png",640,427,true],"large":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos.png",640,427,false],"1536x1536":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos.png",900,600,false],"2048x2048":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos.png",900,600,false],"archive-list":["https:\/\/affinite.io\/cs\/wp-content\/uploads\/sites\/2\/2025\/10\/woocommerce-hpos-400x265.png",400,265,true]},"uagb_author_info":{"display_name":"Affinite","author_link":"https:\/\/affinite.io\/cs\/author\/affinite\/"},"uagb_comment_info":0,"uagb_excerpt":"WooCommerce HPOS – High-Performance Order Storage Obsah 1. \u00davod do HPOS HPOS (High-Performance Order Storage) 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. 1.1 Pro\u010d HPOS? Probl\u00e9my p\u016fvodn\u00edho syst\u00e9mu: V\u00fdhody HPOS: 1.2 Souborov\u00e1 struktura v k\u00f3du Hlavn\u00ed implementa\u010dn\u00ed soubory: 2. HPOS Datab\u00e1zov\u00e9 tabulky HPOS pou\u017e\u00edv\u00e1 4 hlavn\u00ed","_links":{"self":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts\/10681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/comments?post=10681"}],"version-history":[{"count":7,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts\/10681\/revisions"}],"predecessor-version":[{"id":10689,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/posts\/10681\/revisions\/10689"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/media\/10688"}],"wp:attachment":[{"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/media?parent=10681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/categories?post=10681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/affinite.io\/cs\/wp-json\/wp\/v2\/tags?post=10681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}