web-dev-qa-db-ja.com

カスタマイザで未保存のウィジェットのリストをどこで入手できますか?

カスタマイザで、新しいウィジェットを追加するときはいつでも(ただし、変更を保存または公開する前に)、そのサイドバー領域内のウィジェットの数を取得したいと思います。

変更が保存されてウィジェットがDBに保存されたら、wp_get_sidebars_widgetsinitフックで呼び出され、そこでウィジェットが登録されます)を使用して、各サイドバー領域のすべてのウィジェットをカウントできます。

私はwp.customize.Widgetsオブジェクトとwp.customize.WidgetCustomizerPreviewオブジェクトを調べましたが、それらが私に必要なものを提供するようには見えません。この情報はJSのどこに保存されていますか?

3
rugbert

あなたはサイドバーの中でウィジェットのリストを得ることができます:

wp.customize('sidebars_widgets[sidebar-1]').get()

これはウィジェットのIDのリストです。 sidebars_widgets[sidebar-1]はサイドバーの設定IDです。 sidebar-1をサイドバーのIDに置き換えます。

だからカウントを得るためにちょうどする:

wp.customize('sidebars_widgets[sidebar-1]').get().length

ウィジェットがサイドバーに追加または削除されたときに待機したい場合は、次のように変更を待機するためにbindsettingに変更できます。

wp.customize( 'sidebars_widgets[sidebar-1]', function( sidebarSetting ) {
    sidebarSetting.bind( function( newWidgetIds, oldWidgetIds ) {
        console.info( {
            added: _.difference( newWidgetIds, oldWidgetIds ),
            removed: _.difference( oldWidgetIds, newWidgetIds )
        } );
    } )
} );
6
Weston Ruter