it-roy-ru.com

Customizer JS API

Итак, я пытался научить себя динамически создавать новые секции панелей и элементы управления с помощью 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() в консоли, чтобы раздел появился, то же самое и с контролем.

10
Aniruddh Joshi

1) Возможно, привязка к состоянию api.ready, которое может исправить необходимость дважды вызывать ваш раздел

(function($, api){
  api.bind( 'ready', function() {...

  }
})(jQuery);

В trac я увидел заметку, в которой говорилось: "Обратите внимание, что API-интерфейсы для динамически добавленных элементов управления и API-интерфейсы для пользовательских разделов и панелей с JS-шаблонами еще не доступны в WordPress 4.2. См. # 30741". Чтение того, что trac заканчивается "скорее всего, не для 4.5 прямо сейчас", поэтому ваши усилия могут оказаться тщетными = (

2) Для справки, API JS wp_customize можно найти здесь . Эта ссылка может быть также полезна.

3) Мне не хватает представителя для третьей ссылки, но вы можете посмотреть на Kirki.org, который является вспомогательной средой для полей настройщика. Кирки тоже довольно активен на 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;
  }
}

Удачи.

2
Philip Ingram