問題描述

我想知道是否可以擴展 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。