Repository navigation
Releases: Ya19880104/yangsheep-checkout-optimizer
Releases · Ya19880104/yangsheep-checkout-optimizer
Release list
v1.7.11 - PayNow 官方物流相容 + 收件人電話排序修正 + 電子發票模組相容
含 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 宣告
Hub Client 升級至 2.0.5,移除 vendor library 無效的 HPOS 宣告;結帳強化主外掛改由已註冊的主檔正確宣告 HPOS 相容性。結帳與前端功能未變更。
v1.7.8 - 後台雙入口強化 + Hub Client 2.0.4 + footer 等高
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 - 父選單正名電商工具箱 + 雙入口
父選單正名「電商工具箱」
- 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 校正契約)、CVS43/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 折抵金額鏡射 + 折抵介面版面調整
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 安全數字代理
後台
- 新增獨立「購物金整合」分頁;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 syntax9/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 - 修結帳通知位置 + 消除原生結帳閃現
修結帳通知位置
- 根因: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-pendingbody class wp_head注入 critical CSS,於首次繪製前隱藏form.checkout(只隱藏表單,不隱藏整頁)- 增強成功後由
__ysCheckoutRelease('enhanced')立即解除
四條獨立復原路徑(絕不永久隱藏)
- 主 JS 增強成功即釋放
- preflight JS 於 DOM ready 後 2 秒 timeout 釋放為原生
- 純 CSS
animation: 0s 2s forwards於 2 秒後強制visibility:visible— 完全不需 JavaScript <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、設定 migration14/14 - PHP lint
38/38、JS syntax8/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 模板回歸核心 + 結帳欄位相容開關
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、設定 migration14/14、PHP lint38/38、JS syntax8/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 選店面板重構
物流辨識
- 完整 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 lint44/44、JS syntax8/8 - 真實下單:PayNow 門市回填、混合包裹空地址擋單、後台指定 CVS 空地址建單、完成頁地址無 placeholder 洩漏
- 390px 行動視埠實測:PayNow 顯示門市摘要而非輸入框、原生欄位保留為送單源、無水平溢位
封裝
yangsheep-checkout-optimizer-1.7.2.zip(64 檔、218,204 bytes)- SHA-256:
10706A5C3F7DE5E103F01E1ABA8803B417F8498E09C62F8BACE7C050942EF63B
v1.7.1 - 發布品質關卡與視覺收尾
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=trueCRLF 工作樹)、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 說明)