問題描述

我想知道是否可以擴充套件 wp-admin/js/customize-control.js 中匿名 api 物件的方法。我需要使用自己的自定義邏輯覆蓋這些方法之一,但我懷疑這是不可能的,因為它被包裹在一個立即被呼叫的函式表示式中:

/* globals _wpCustomizeHeader, _wpMediaViewsL10n */
(function( exports, $ ){
// code
})( wp, jQuery );

據我所見,我無法從視窗物件中擴充套件原型,因為它是匿名執行的,不能從 window.wp.customize 獲得。任何想法,如果這樣的事情是可能的?甚至提到在.toggle() 方法檔案/描述:https://github.com/WordPress/WordPress/blob/master/wp-admin/js/customize-controls.js#L110 中覆蓋這一點,但我不知道是否意味著透過簡單地分派整個 JS 檔案,將 WP 版本排隊並排隊自己,或者如果它們是或有些不同。

請注意,似乎應該可以使用 wp.customize.{method}.extend({ foo: // replace method foo here }),但這僅適用於公共基類/物件,而不適用於 wp-admin/js/customize-control.js

最佳解決方案

我會加強我對你的問題的小小評論。但再次提示; 我不是 JS 專家以下來源,提示僅用於使用 Customizer 進行不同的檢查,例如我的 sandbox

wp.​​customize

瞭解 WP 主題定製程式介面圍繞著理解 wp.customize JavaScript 物件。 wp.customize 物件很重要,您應該在開始時進行設定。

例項

以下小例子說明瞭這一點。起初我將 var api 設定為定製器的物件。之後,我將自定義欄位設定為 api,並使用小型 jQuery 源來增強這一點,以重新整理即時預覽的結果。

( function( $ ) {
    var api = wp.customize;

    // Site title and description.
    api( 'blogname', function( value ) {
        value.bind( function( to ) {
            $( '#header h1 a, #footer a.site-name' ).html( to );
        } );
    } );

    api( 'blogdescription', function( value ) {
        value.bind( function( to ) {
            $( '#header p.site-description' ).html( to );
        } );
    } );

} )( jQuery );

設定和控制元件

控制物件儲存在 wp.customize.control 中,設定物件儲存在 wp.customize 中。值班有很多功能,可以幫助你。

  • instance(id) – 從集合中獲取具有指定 ID 的物件。

  • has(id) – 如果集合包含具有指定 id 的物件,則返回 true,否則返回 false 。

  • add(id,value) – 使用指定的 id 和值將物件新增到集合。

  • remove(id) – 從集合中刪除物件。

  • create(id) – 使用預設建構函式建立一個新物件,並將其新增到集合中。

  • 每個 (回撥,上下文) – 迭代集合中的元素。

自定義設定

透過這些功能,我們可以增強自定義設定。

var api = wp.customize,
    mysetting = api.instance( 'my_custom_setting' );

也可用於陣列

var api = wp.customize,
    mysetting = api.instance( 'my_custom_settings[my_custom_setting_field]' );

Get

在控制檯中檢視結果。

console.log( api.instance( 'my_custom_settings[my_custom_setting_field]' ).get() );

Set

您還可以透過功能 set 更改設定值。

api.instance( 'my_custom_settings[my_custom_setting_field]' ).set( 'my new value' ) );

獲取控制元件,作為物件

console.log( api.control.instance( 'my_custom_setting_field' ) );

有用的來源

  • wp-admin /JS /customize-controls.js

  • wp-includes /JS /customize-preview.js

  • wp-includes /JS /customize-base.js

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。