過濾以禁用在 WordPress Trac 上擊落的定制器
已發表: 2015-07-01
WordPress 4.3 將通過定制器引入菜單管理,在前端提供實時預覽以添加、刪除和訂購菜單項。 儘管用戶仍然可以選擇使用管理界面管理菜單,但不熱衷於該功能的開發人員正在尋找一種簡單的方法來禁用定制器並在整個 WordPress 中刪除其鏈接。
在涉及客戶工作的某些場景中,定制器可能比它的價值更麻煩,並且可能不是定制的 WordPress 管理員的有益補充。
@pollyplummer 非常有趣。 我不反對新的更新,但定制器是代理世界的地獄。
——愛德華·麥金太爾 (@twittem) 2015 年 6 月 24 日
Risdall 的應用程序開發人員和 UI 工程師 Gabe Shackle 上週在 WordPress trac 上創建了一個工單,請求一個過濾器來禁用定制器。 他的補丁為開發人員提供了一種在 body 標籤中啟用“no-customizer-support”類的簡單方法。
由於“customizer-support”類是通過 JavaScript 在頁面渲染中添加的,因此目前無法使用任何核心過濾器或操作對其進行操作。
通過將過濾器值設置為 false,定制器實質上對管理員隱藏,並且當前指向定制器的鏈接(小部件、主題等)將恢復到它們以前的儀表板目標。
目前,想要禁用定制器的開發人員必須結合使用不同的方法才能有效地刪除定制器引入到管理員中的所有內容。
“這個過濾器將這個過程變成了一個簡單的布爾過濾器,這樣不需要或不需要定制器的開發人員就可以輕鬆地刪除它,”Shackle 說。
WordPress 首席開發人員 Dion Hulse 回复票說,雖然他自己並沒有經常使用定制器,但他認為 WordPress 用戶不會從簡單的關閉它的方法中受益。
就我個人而言,儘管我很多時候不使用定制器,但我認為提供一個過濾器來禁用它可能不符合 WordPress 用戶的最佳利益。
定制器,儘管有些人不喜歡它,但它是 WordPress UX 未來的主要組成部分——無論這是好事還是壞事還有待一些人看到——但喜歡它還是討厭它,它就在這裡。
作為替代方案,Hulse 建議禁用它的更好方法是從角色中刪除customize功能。

Shackle 進一步解釋說,他試圖遵循管理欄的先例,他認為這是一種類似類型的 UX 組件。
“管理欄不僅可以通過過濾器禁用,還可以通過全局變量、核心功能和用戶配置文件設置來禁用,”他說。 “定制器沒有這些選項。”
正在合併到 4.3 中的 Menu Customizer 插件的開發人員 Nick Halsey 基於關於 Shackle 可能會請求過濾器以禁用該功能的假設的假設回答:
我還沒有看到這樣的事情的正當理由。 在大多數情況下,不希望用戶訪問定制器的擔憂源於您沒有為他們提供適當的功能。 如果您確實需要,可以使用自定義功能關閉自定義程序。
雖然您可以刪除自定義元功能(或重新映射它或其他),但僅僅因為您不想培訓用戶或不想使用自定義程序而這樣做會對您自己和您的用戶造成極大的傷害。 正如 dd32 所提到的,定制器在 WordPress 中的重要性只會繼續增長。 此外,用戶測試表明,用戶通常比管理員更容易掌握定制器體驗,這在很大程度上源於提供實時預覽的價值。 我們在每個版本的定制器上都投入了大量時間來繼續改進它,並在此過程中進行頻繁的用戶測試以優化可用性。
哈爾西在這次交換後立即關閉了票。 我跟進了 Shackle 以找出為什麼提議的刪除customize功能的替代方案不足以滿足他的目的。
“主要是我希望定制器可以更像管理欄,它有 3 多種禁用它的方法,”Shackle 說。 “在我看來,擁有一個清晰標記的過濾器比修改用戶功能更清晰。 幾乎沒有 WordPress 知識的 PHP 開發人員很可能使用名為“enable_customizer_support”而不是“map_meta_cap”的過濾器更快地理解正在發生的事情。”
顯然,並非所有票據和補丁都會被 WordPress 核心組件的維護者認為是有效的,但 Shackle 對討論的防禦性反應感到失望。
“老實說,如果回答只是類似於'你應該使用customize功能來實現相同的效果',我真的不會有任何問題,”他說。
“不幸的是,似乎除了‘所有事物的定制者’之外的任何方法! 意味著我被多次告知我對客戶造成了多大的傷害,以及我是一個多麼懶惰的開發人員,而不僅僅是重新培訓我的客戶如何管理他們的網站外觀。
Shackle 說:“感覺就像 Customizer 團隊本身對項目採取了全有或全無的方法,任何對此提出質疑的人都是錯誤的,無論他們的推理如何。”
這種交流表明,由於核心貢獻者將定制器視為 WordPress 未來的主要部分,因此這是一個很少願意支持使其更加模塊化的努力的功能。 禁用對定制器的支持將繼續需要使用“map_meta_cap”,這與定制器刪除所有部件插件的創建者所採用的方法相同。
