Customizer JS API

10

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

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

  }
})(jQuery);

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

2) Для справки, API-интерфейс 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;
  }
}

Удачи.

Филипп Ингрэм
источник
1
Note that the APIs for dynamically-added controls, and APIs for JS-templated custom Sections and Panels are not yet available as of WordPress 4.2.Это подводит итог. :(
Анируддх Джоши
-2

Я бы посоветовал вместо того, чтобы изобретать велосипед, возможно, вы будете рассматривать эту основу как основу для своих проектов. http://wpshed.com/wordpress-theme-customizer-framework/ .

Это лучшее, что я нашел, когда учился и искал фреймворки. Вы можете расширить эту платформу своими собственными пользовательскими элементами управления, а ссылка ниже поможет вам понять и реализовать связь между настройщиком и предварительным просмотром настройщика через jQuery или javascript.

https://conductorplugin.com/developing-wordpress-customizer-part1/

Мохит Анеджа
источник
Здравствуйте, Мохит, спасибо за ответ, но то, что вы предоставили, не отвечает на настоящий вопрос. Даже когда вы используете эти фреймворки, вы все равно должны использовать JS API. Эти fraworks не расширяют JS API настройщика и, следовательно, в этом случае бесполезны.
Анирудд Джоши
Привет, ты можешь легко управлять этим с другой ссылкой, которую я предоставил для файлов JS. Я делаю это таким образом и решаю свою задачу.
Мохит Анеджа
Хм, поддержка управления, разделов и панелей в JS API шла с версии 4.0, которая была запущена 14 декабря, а статья, на которую вы ссылаетесь, была написана 14 сентября. Вы понимаете, что я имел в виду в вопросе?
Анируддх Джоши