さて、私はカスタマイザのJS APIを使って動的に新しいパネルセクションとコントロールを作成するように自分自身を教育しようとしていました。
それは数日間イライラしていると私はJS APIを介してこれを達成するための正確な方法を得ることができませんでした。
これまでのところ、これを実現するために私がしていることはいくつかありますが、成功しません。
// for Settings
api.create(
params.id,
params.id,
params.default,
params.args
);
// for controls
var controlConstructor = api.controlConstructor[params.type];
var control = new controlConstructor(params.id, {
params: params,
previewer: api.previewer
});
api.control.add(
params.id,
control
);
//for Sections
var section = new api.Section(params.id, {
params: params
});
api.section.add( params.id, section );
api.section('section_id').activate();
セクションが表示されないのでそれらのどれも動作していないようで、セクションを表示させるためにコンソールでapi.section('section_id').activate()
を2回実行しなければなりません、同じことはコントロールと同じです。
1)api.ready状態にバインドすると、セクションを2回呼び出す必要がなくなります。
(function($, api){
api.bind( 'ready', function() {...
}
})(jQuery);
「動的に追加されたコントロール用のAPI、およびJSテンプレートのカスタムセクションおよびパネル用のAPIは、WordPress 4.2ではまだ使用できないことに注意してください。#30741を参照してください」そのtracを読むのは「今は4.5には向いていない可能性があります」で終わるので、あなたの努力は無駄かもしれません=(
2)参考のために、wp_customize JS APIは ここ にあります。この link も役に立つかもしれません。
3)私は3番目のリンクのための十分な担当者を持っていません、しかしあなたはカスタマイザフィールドのためのヘルパーフレームワークであるKirki.orgを見るかもしれません。 KirkiはGithubにもかなり積極的です。
4)PHP側では、フィールド配列に "active_callback"オプションを使って動的にフィールドを表示することができます。
$wp_customize->add_control( 'some_single_page_specific_option', array(
'label' => esc_html__( 'Single Page Option' ),
'section' => 'my_page_options',
'active_callback' => 'if_is_singular',
));
function if_is_singular(){
if( is_singular() ){
return true;
} else {
return false;
}
}
がんばろう。