是否可以扩展WP Customize JS方法?


9

我想知道是否有可能在中扩展匿名api对象 的方法wp-admin/js/customize-control.js。我需要用自己的自定义逻辑覆盖这些方法之一,但是我怀疑这是不可能的,因为它包装在立即调用的函数表达式中:

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

据我所知,我无法从window对象扩展原型,因为它是匿名执行的,无法从中获得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


3
尽管api是匿名的,但它只是wp.customize(可在全球范围内访问的)同义词(请参阅第3行)。但是,似乎用于控件的“另一个对象模型”调用了该ready函数,initialize因此可能没有机会(即为时已晚)覆盖方法-您要扩展什么?
bonger 2014年

从理论上讲,这是有道理的-建议表示赞赏。就我而言,我觉得这种方法很不可靠,并设法为我的用例提出了另一个合适的解决方案。但是,对于没有其他选择用例的人,可以使用有效代码的答案仍然有用。无论如何,按照我计划的执行效果会很糟糕。
Brian

1
我不是JS专家。但是我在一个小主题中添加了定制脚本,以始终刷新我的扩展。我使用 wp.customize并向该对象添加功能。参见此处的源示例-github.com/bueltge/Documentation/blob/master/js/…–
bueltge

Answers:


5

我将对您的问题发表一些小意见。但是又有暗示;我不是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)–使用默认构造函数创建一个新对象,并将其添加到集合中。
  • each(回调,context)–遍历集合中的元素。

自定义设置

使用此功能,我们可以增强自定义设置。

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

也可用于数组

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

得到

在控制台中查看结果。

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

您也可以通过功能更改设置值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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.