it-swarm.com.ru

Theme Customizer не загружает JS для предварительного просмотра

В настоящее время я работаю над добавлением параметров в настройщик темы. Последние два часа я пытался заставить работать предварительный просмотр в реальном времени, и я пытаюсь выяснить, почему моя тема не загружает файл theme-customizer.js, необходимый для предварительного просмотра в реальном времени.

Все параметры, которые я добавил в настройщик темы, работают, если я сохраню их, а затем обновлю страницу. Так что я знаю, что это не проблема с настройками.

В настоящее время у меня есть ловушка для вызова файла JS в файле customize.php вместе со всеми настройками настройщика. У меня также есть отдельный theme-enqueue.php, где я ставлю в очередь другие файлы JS для моей темы.

Вот пример перехвата, который я пытаюсь вызвать в JS-файл из моего customize.php-файла:

function mytheme_customize_preview_js() {
wp_enqueue_script( 'mytheme-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20120187', true );
}
add_action( 'customize_preview_init', 'mytheme_customize_preview_js' );

Когда я проверяю загруженные файлы javascript в chrome, кажется, что загружаются все, что мне нужно, кроме этого. Кто-нибудь может пролить свет на ситуацию?

1
user1632018

я думаю, что ваш скрипт загружен правильно, та же функция используется в двадцати двенадцати (но ваш скрипт находится внутри iframe), но я могу ошибаться (не знаю точно, как создается ваша тема, возможно, это проблема, связанная с путем с несколькими включениями)

enter image description here

чтобы увидеть изменения без обновления, вы должны использовать аргументы 'transport' в add_setting и get_setting в вашей функции customize_register

$wp_customize->add_setting( 'my_setting', array( 'default' => 'setting_value', 'transport' => 'postMessage', ) );

Это может быть "refresh" (по умолчанию) или "postMessage". Установите для этого параметра значение "postMessage", только если вы пишете собственный Javascript для управления предварительным просмотром Theme Customizer.

$wp_customize->get_setting( 'my_setting' )->transport = 'postMessage';
1
Tribalpixel

Возможно, потому что вы вызываете его из ловушки initpress init или admin_init, тогда как вы должны вызывать его из ловушки after_setup_theme.

Например:

function mytheme_customize_preview_js() {
    wp_enqueue_script( 'mytheme-customizer', get_template_directory_uri() . '/js/theme-customizer.js', array( 'customize-preview' ), '20120187', true );
}
function my_after_setup_theme(){
    add_action( 'customize_preview_init', 'mytheme_customize_preview_js' );
}

add_action( 'after_setup_theme', 'my_after_setup_theme' );
0
Mauro Colella

Это не может быть точным ответом на проблему. Но это помогло мне решить ту проблему, которую мы обсуждаем.

При использовании 'transport' => 'postMessage' я не смог увидеть предварительный просмотр вживую. Поэтому я создал новые файлы, используя следующий код на Github

Я просто скопировал и вставил этот код. Проверено, а затем настроено в соответствии с моими требованиями. Я знаю, что это не решение, но оно было лучшим для меня.

Спасибо Тому Макфарлину за код.

0
JDP