Skip to content

Releases: Ya19880104/yangsheep-checkout-optimizer

v1.7.11 - PayNow 官方物流相容 + 收件人電話排序修正 + 電子發票模組相容

Choose a tag to compare

@Ya19880104 Ya19880104 released this 27 Aug 15:59

含 v1.7.10 + v1.7.11 兩版變更。

v1.7.11

  • 修正收件人電話在宅配模式被排到詳細地址之後:WooCommerce 8.9+ 前端 address-i18n.js 會用 core locale 的 phone 條目(priority 100、label「聯絡電話」、class form-row-wide)蓋掉伺服器輸出並重排 DOM。新增 locale filter 將 phone 條目對齊 YS 契約(priority 15、label/class/placeholder 交還伺服器端定義、required 保留原值)。

v1.7.10

  • wc-paynow-shipping(PayNow 官方物流)相容:選非 PayNow 物流時收件人電話被其前端 JS 連坐隱藏 → 以永遠載入的規則強制顯示。
  • 站方自訂選店複製鈕(button.ys-cvs-btn):native 模式修正為全寬按鈕;enhanced 模式已有 YS 超商門市面板,複製鈕隱藏。
  • 訂單備註切換器固定插在訂單備註欄位正上方,與電子發票(速買配等)模組共存時維持「發票 → 切換器 → 備註」順序;顯示同步閘門放寬為「enhanced 或切換器實際可見」(fail-open)。

🤖 Generated with Claude Code

v1.7.9 - 修正 Hub Client HPOS 宣告

Choose a tag to compare

@Ya19880104 Ya19880104 released this 27 Jul 17:11

Hub Client 升級至 2.0.5,移除 vendor library 無效的 HPOS 宣告;結帳強化主外掛改由已註冊的主檔正確宣告 HPOS 相容性。結帳與前端功能未變更。

v1.7.8 - 後台雙入口強化 + Hub Client 2.0.4 + footer 等高

Choose a tag to compare

@Ya19880104 Ya19880104 released this 25 Jul 16:20

v1.7.8:後台雙入口強化 + Hub Client 2.0.4 + footer 等高

  • 雙入口導覽強化:設定頁完整載入資產、儲存後留在原入口、未知 page slug 回工具箱子入口(tests/admin-menu-endpoints.php 11 案)
  • Hub Client 2.0.4:新增 YSToolboxMenuNormalizer(載於 first-client guard 前)——同站存在任一 2.0.4 副本即統一父選單名稱/圖示/位置 56,系統資訊/聯絡我們固定置底;舊 2.0.2 先載入也不啟動第二套 updater
  • 修正 footer「儲存設定/一鍵恢復預設配色」不等高(46/54px):(0,3,0) 選擇器共用 44px 明確高度,蓋過 WP core .button.button-large
  • dist 改由 .gitattributes export-ignore 管理(tests/docs/README/composer 不入包)
  • 契約 147/147、選單端點 11/11、CVS 43/43、欄位相容 5/5、遷移 18/18、匯入匯出 30/30

封裝

  • SHA-256: D864DD7D5FC6B774B91783CD2E5FD8FF870AD84CE69E7683D7481465E8388310

v1.7.7 - 父選單正名電商工具箱 + 雙入口

Choose a tag to compare

@Ya19880104 Ya19880104 released this 25 Jul 03:59

父選單正名「電商工具箱」

  • Hub Client 升級 2.0.3:ys-toolbox 頂層選單中央統一註冊為「電商工具箱」(dashicons-store、位置 56,與開發準則 §4 及各外掛自建選單完全一致;同一 slug 無論誰先註冊,結果相同)
  • 外掛端 label 校正:同站若有尚未更新的舊版 Hub Client(≤2.0.2 先以「YS Plugin」註冊同一 slug),偵測到既有 ys-toolbox 時統一改回「電商工具箱」

恢復獨立「結帳強化」入口(雙入口)

  • 重新註冊舊版頂層端點 admin.php?page=yangsheep_checkout_optimization
  • 保留 電商工具箱 → 結帳強化 子入口 admin.php?page=ys-checkout-optimizer
  • 兩者共用相同設定頁、權限與資料來源;表單儲存後留在管理員原先開啟的入口
  • 未知或偽造 page slug 回到電商工具箱子入口

驗證

  • 架構契約 146/146(含 Hub Client 2.0.3 命名/圖示與 label 校正契約)、CVS 43/43、欄位相容 5/5、設定遷移 18/18、設定匯入匯出 30/30、選單端點 9/9
  • PHP lint 42/42、JS syntax 通過
  • 多外掛共存實測(本外掛 2.0.3 + 同站三支舊 2.0.2 Hub Client 外掛):電商工具箱 dashicons-store、子選單含結帳強化、獨立入口並存、雙入口同開設定頁、全選單零「YS Plugin」

封裝

  • yangsheep-checkout-optimizer-1.7.7.zip(58 檔、228,673 bytes)
  • SHA-256: 5809DFDA358FCBF2F847CCA05EAEE7CFB9116AD941A4ACA05A0C4752B9FD3C5C

v1.7.6 - YITH 折抵金額鏡射 + 折抵介面版面調整

Choose a tag to compare

@Ya19880104 Ya19880104 released this 24 Jul 19:13

YITH 折抵金額鏡射

  • v1.7.5 代理介面漏掉 YITH 原生「輸入點數 → 可折抵 NT$X」換算,現鏡射官方 .woocommerce-Price-amount 金額
  • 輸入點數經原生 keyup 觸發 YITH 官方即時換算,YS 不自行以比例推算
  • 顯示「目前輸入 X 點,可折抵 NT$Y」;換算中、無效數字與官方端點無回應各有獨立狀態,無效值不殘留舊金額
  • fragment 重建時清除舊 MutationObserver 與 fallback timer,避免重複監聽
  • 後台預覽與操作說明同步補上金額換算

折抵介面版面調整

  • 移除「折抵點數」文字 label(aria-label 保留於輸入框供無障礙)
  • 輸入框靠左,與「套用折抵」「全部使用」同列
  • 「本次最多可使用 X 點」移至區塊右上角,與「購物金折抵」標題垂直置中對齊
  • 窄幅(<480px)輸入框獨占一列、兩鈕並排第二列
  • 後台預覽同步新版面;新增契約鎖定版面結構

驗證

  • 架構契約 142/142、CVS 矩陣 43/43、欄位相容 5/5、設定遷移 18/18、設定匯入匯出 30/30
  • PHP lint 40/40、JS syntax 通過;dev-checkout 58/58 runtime parity
  • 瀏覽器實證:四項版面需求逐一幾何驗證(輸入框貼齊左緣、兩鈕同列同高、上限文字右緣對齊且與標題同中線);390px 無水平溢位
  • 互動實證:1,800 點→NT$18、100 點→NT$1(官方換算)、1.5 無效攔截、「全部使用」還原
  • P0 防線:form.checkout 內巢狀 <form> = 0,代理按鈕 type="button" 無 name/id/form

封裝

  • yangsheep-checkout-optimizer-1.7.6.zip(58 檔、227,723 bytes)
  • SHA-256: 0FB171A0E8F8A56E25E400EDCCBD980698DE40E98DC14BEA2DE640089D953CB5

v1.7.5 - 購物金整合分頁 + 設定匯入匯出 + YITH 安全數字代理

Choose a tag to compare

@Ya19880104 Ya19880104 released this 24 Jul 18:16

後台

  • 新增獨立「購物金整合」分頁;WPLoyalty 與 YITH Points & Rewards 分成兩個供應商區塊,各含偵測狀態、啟用開關、操作說明與共用預覽
  • 新增主要文字、標題、次要文字、輔助文字四項配色設定
  • 外掛標頭補上 Requires PHP: 8.0

YITH 安全數字代理

  • 直接輸入點數、Enter 套用、「全部使用」、使用上限與錯誤提示
  • 代理為純 div,不含 form/name/id;原生 YITH form 保留在 form.checkout 之外,維持唯一提交來源
  • 契約或樣式不成立時不建立代理、不隱藏原生介面(fail-open)
  • 非 AJAX 兌換以欄位鏡射保留結帳輸入,不使用瀏覽器儲存、不鏡射付款控制項

WPLoyalty

  • 只接管單一可見且具原生 reward link 的訊息來源;實際活動與扣點仍交由原生視窗處理

設定匯入/匯出(新增)

  • 55 項 canonical 設定 + 3 項 WPLoyalty 顯示文字
  • AJAX 端點具 nonce 與 manage_options 檢查;上傳須通過 is_uploaded_file、副檔名與 1 MB 上限
  • exact-key schema:unknown 與 missing 皆拒絕
  • 值驗證依 canonical default 型別驅動(顏色 hex、rate ID 字元白名單、yes/no、長度單位),未明確處理者一律拒絕
  • 顯示文字禁 HTML、剝控制字元、placeholder 白名單
  • 共享寫入鎖(add_option 原子取得 + TTL + hash_equals 釋放)
  • 先驗證再寫入;任一步失敗即反序回滾並回報回滾結果

設定遷移

  • 改為只補齊自訂表缺少的資料,既有列不被 wp_options 覆寫
  • 補齊完成前禁止清除 wp_options,避免部分遷移導致設定遺失

CSS 與架構

  • 按鈕、欄位、區塊、物流卡、側邊欄、購物金與圓角統一取用後台設定 token
  • 移除物流選中狀態固定藍灰陰影,改為中性 shadow
  • 55/55 canonical 設定皆有後台控制與 runtime consumer

驗證

  • 架構契約 140/140、CVS 矩陣 43/43、欄位相容 5/5、設定遷移 18/18、設定匯入匯出 30/30
  • PHP lint 40/40、JS syntax 9/9、git diff --check 通過
  • 真實下單 #12370(YITH 100 點折抵 NT$1,_ywpar_redemped_points=100);匯入匯出以真實 multipart HTTP E2E 驗證
  • 獨立覆核以 DOM 實證 P0 防線:form.checkout 內巢狀 <form> = 0、代理按鈕 type="button" 無 name/id/form、原生 YITH form 在結帳表單之外

封裝

  • 58 檔、234,581 bytes
  • SHA-256: 1943F36FF883299017B00F5BC977327CBE8A731AA80806B6C1825345F9EDFCFF

v1.7.4 - 修結帳通知位置 + 消除原生結帳閃現

Choose a tag to compare

@Ya19880104 Ya19880104 released this 24 Jul 13:57

修結帳通知位置

  • 根因:WooCommerce notice wrapper 位於結帳 form 外、寬度覆蓋整頁;搭配 sticky sidebar 後,通知會穿過左欄
  • 新增右主欄專用 .yangsheep-checkout-notice-host(aria-live="polite")
  • 統一收納初始通知、折扣 AJAX 回應與 Woo checkout_error
  • 折扣通知只寫入單一 host,不再同時寫入所有 wrapper;無 host 時退回第一個原生 wrapper
  • 原生送單錯誤搬移後重算捲動位置,確保通知可見
  • 未成功啟用結帳增強時維持原生 notice wrapper(fail-open)

實測:修前通知 x=56.5 / 寬 1152px(覆蓋整個容器)→ 修後 x=397 / 寬 960px,與右主欄完全一致;外部 notice wrapper 均為空。

消除原生結帳閃現(FOUC)

  • 根因:v1.7.0 導入漸進增強後,4 支版面 CSS 以 media="not all" 載入,需等頁尾 JS 完成 CSS/DOM 契約檢查才啟用;瀏覽器可能在 JS 執行前先繪製原生 WooCommerce 結帳。快取或 CSS 優化外掛只會放大,不是根因
  • HTML 輸出時即加上 ys-checkout-pending body class
  • wp_head 注入 critical CSS,於首次繪製前隱藏 form.checkout(只隱藏表單,不隱藏整頁)
  • 增強成功後由 __ysCheckoutRelease('enhanced') 立即解除

四條獨立復原路徑(絕不永久隱藏)

  1. 主 JS 增強成功即釋放
  2. preflight JS 於 DOM ready 後 2 秒 timeout 釋放為原生
  3. 純 CSS animation: 0s 2s forwards 於 2 秒後強制 visibility:visible — 完全不需 JavaScript
  4. <noscript> 於 JS 停用時立即還原

另於 window.load 時若增強未成立則釋放為原生。

故障實測:正常載入直接進 YS 版面;阻擋主 JS 約 2.3 秒安全恢復原生;阻擋任一核心 CSS 於 window.load 顯示原生;關閉 JavaScript 由 <noscript> 立即還原。獨立覆核另實證純 CSS 路徑:0s hidden → 0.9s hidden → 2.5s visible(全程未呼叫 release)。

驗證

  • 架構契約 111/111、CVS 矩陣 43/43、欄位相容 5/5、設定 migration 14/14
  • PHP lint 38/38、JS syntax 8/8、git diff --check 通過
  • dev-checkout runtime 雜湊一致,debug log 無 Fatal/Parse/Uncaught

封裝

  • yangsheep-checkout-optimizer-1.7.4.zip(56 檔、221,465 bytes)
  • SHA-256: F0BAFA326ECE2F650BD6B02B965D7D288149F46C4B8AD34A1A90B33F4E8D3A51

v1.7.3 - My Account 模板回歸核心 + 結帳欄位相容開關

Choose a tag to compare

@Ya19880104 Ya19880104 released this 24 Jul 05:03

My Account/訂單模板回歸核心

  • 移除 8 個過期 opt-in 模板(6 myaccount + 2 order)與 woocommerce_locate_template 覆寫
  • 訂單操作列 wc_get_account_orders_actions()、woocommerce_after_order_details 及新版 Woo 標記全部回歸核心模板(Woo 10.4.4)
  • My Account 視覺改為純 CSS 增強,不再接管模板;修 Blocksy 桌面雙欄與 390px 導覽溢位

結帳欄位外掛相容(新增,預設關)

  • 後台開關 yangsheep_checkout_field_compatibility
  • 開啟後於 PHP_INT_MAX 重套 YS 欄位模型(帳單只留姓名/電話/Email、地址由收件資訊提供)
  • 以 array_diff_key 保留第三方/自訂欄位再補回,不白名單粗暴刪除
  • 增強失敗時保留原生控制,避免無法輸入收件地址

後台設定與 defaults

  • 移除 6 個無前台消費端的 no-op 設定,並加入 migration 清除清單
  • admin/runtime/自訂表/重設統一使用單一 DEFAULT_VALUES
  • migration 失敗不再錯誤升版、保留資料重試;不重匯 wp_options 覆蓋自訂表

CSS 減脂

  • 移除 .ct-order-review、舊登入、自訂帳號模板等無 producer 死規則
  • !important:checkout 109→94、myaccount 39→35、order 2→0;CVS always-on 規則保留

驗證

  • 架構契約 106/106、CVS 矩陣 43/43、欄位相容 5/5、設定 migration 14/14、PHP lint 38/38、JS syntax 8/8
  • P1 決定性實證:wc_locate_template('order/order-details.php') 解析回核心;8 舊模板實體刪除
  • 實際下單 #12351(宅配)、PayNow 超取、Coupon、YITH、WPLoyalty、故障注入、390px 均通過

封裝

  • yangsheep-checkout-optimizer-1.7.3.zip(56 檔、219,901 bytes)
  • SHA-256: 3971D0B13DE90F124602D9005E1A521F3A4FED092FA4D8764CE57804BAB1AC26

v1.7.2 - 超商辨識修正與 PayNow 選店面板重構

Choose a tag to compare

@Ya19880104 Ya19880104 released this 23 Jul 12:18

物流辨識

  • 完整 rate ID 僅精確相等比對,杜絕 flat_rate:1 誤中 flat_rate:10
  • 多包裹改為「全部 package 都是 CVS 才免地址」;混合宅配、空值或未知方法一律保留地址
  • 同時收集 checked radio 與單一物流 hidden input,PHP/JS allowlist 完全對齊
  • 新增好用版 PayNow C2C 7-11/全家/萊爾富預設辨識;B2C 不推測為 CVS

漸進增強解耦(修 v1.7.1 regression)

  • CVS 地址隱藏規則抽成永遠載入的 yangsheep-cvs-mode.css,增強失敗時仍生效

第三方相容

  • PayNow 原生 readonly inputs 保留為送單資料源,增強成功後只顯示不可編輯門市摘要;DOM 契約不成立時 fail-open
  • PayNow 與 PAYUNi 共用 PNCVS 的完成頁地址格式衝突,改以 YS_PAYNOW_CVS 隔離
  • PAYUNi 多包裹地址還原 bridge,避免只讀 package 0 後錯誤隱藏全域地址
  • PayNow 選店 table row 改為全寬;相容 CSS 收斂至 9 個 !important

後台

  • 補充完整 rate ID、混合包裹、B2C/OK/自訂物流手動指定說明,並清除空值與重複設定

驗證

  • 架構契約 94/94、CVS 真碼矩陣 43/43、PHP lint 44/44、JS syntax 8/8
  • 真實下單:PayNow 門市回填、混合包裹空地址擋單、後台指定 CVS 空地址建單、完成頁地址無 placeholder 洩漏
  • 390px 行動視埠實測:PayNow 顯示門市摘要而非輸入框、原生欄位保留為送單源、無水平溢位

封裝

  • yangsheep-checkout-optimizer-1.7.2.zip(64 檔、218,204 bytes)
  • SHA-256: 10706A5C3F7DE5E103F01E1ABA8803B417F8498E09C62F8BACE7C050942EF63B

v1.7.1 - 發布品質關卡與視覺收尾

Choose a tag to compare

@Ya19880104 Ya19880104 released this 18 Jul 17:27

v1.7.1 — 發布品質關卡與視覺收尾

v1.7.0 發布後 REVIEW 的三項收尾(程式行為與付款流程無變更)。

修正

  • 契約測試跨平台(P1 release gate):tests/contract-v1.7.0.php 讀檔統一 CRLF→LF 正規化。Windows 乾淨 checkout(core.autocrlf=true)工作樹為 CRLF,固定 LF 字串斷言會誤判 1 條——修正後 74/74 於 LF/CRLF 工作樹皆可重現。
  • 折扣碼輸入框 CSS 同步(P2):.yangsheep_checkout_coupon #coupon_code → #ys_coupon_code(v1.7.0 改唯一 id 後樣式曾成死碼)。
  • YITH proxy 版面(P2):flatten 容器改 proxy 專屬 class ys-yith-proxy-form,移除對第三方 .ywpar_apply_discounts 的 flex-direction: column !important(直接文字節點被拆成獨立 flex item → 訊息逐行碎裂)。新版面:訊息自然流排、點數輸入框行內、套用按鈕全寬——390px 下 proxy 高度 341→137px、折扣區 624→434px。

驗證(dev-checkout,CODEX 覆核條件式 GO → 條件已完成)

  • 契約 74/74(於 core.autocrlf=true CRLF 工作樹)、PHP lint、JS syntax、git diff --check 全過
  • YITH 100 點套用/取消(280→279→280);全程無 Woo 結帳誤觸、無 SHOPLINE 建單、無 checkout AJAX
  • WPLoyalty 真活動(500→400 點、180→170→還原)與 YITH 同時可見互不清除
  • PAYUNi 完成地圖選店真單 #12232(門市 meta 完整);YS170TEST 折扣券金額鏈
  • RWD 390 無水平溢位;runtime hash 與本機一致

已知非阻擋

  • 390px 下 YITH 句中「點數」可能換行斷詞(無溢位、不影響操作)
  • 跨網域 CDN 合併樣式表無 CORS 時安全退回原生(同 v1.7.0 說明)