Фоновое изображение не сохраняется в WordPress Customizer

Я пытаюсь установить фоновое изображение в WordPress Customizer. Я могу загрузить изображение и просмотреть его в Customizer, но после его сохранения его не появлялось на сайте.

У меня есть следующий код в файле customizer.php:

$wp_customize->add_setting( 'section_1_background_image', array( 'default' => get_template_directory_uri() . '/images/default.jpg', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'section_1_background_image_control', array( 'label' => __('Background Image','minisite'), 'settings' => 'section_1_background_image', 'section' => 'section_1', 'priority' => 10, ) ) ); 

и соответствующий код в моем файле customizer.js

 wp.customize( 'section_1_background_image', function( value ) { value.bind( function( newval ) { $('#wrapper-1').css('background-image', newval ); } ); } ); 

Эта же настройка отлично подходит для цветов фона, но я полагаю, что это связано с «url», который нужно выводить в css перед именем файла background-image, чего он не делает.

Я также пробовал следующее без успеха:

 wp.customize( 'section_1_background_image', function( value ) { value.bind( function( newval ) { $('#wrapper-1').css('background-image', 'url("' + newval + '")' ); } ); } ); 

Я что-то упускаю?

Если вы ссылаетесь на возможность добавления фоновых изображений при навигации по Appearance -> Customize в администраторе WordPress, я обычно предоставляю возможность настраивать фон через custom-background в моих functions.php:

 $custom_background = array( 'default-color' => '00ff00', 'default-image' => get_template_directory() . '/img/default_background.png', 'background-repeat' => 'tile', 'default-position-x' => 'center', 'background-attachment' => 'fixed', 'wp-head-callback' => '_custom_background_cb' ); add_theme_support( 'custom-background', $custom_background ); 

Вы неправильно добавляете контроль.

 $wp_customize->add_setting( 'section_1_background_image', array( 'default' => get_template_directory_uri() . '/images/default.jpg', 'transport' => 'postMessage', ) ); $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'section_1_background_image', array( 'label' => __('Background Image','minisite'), 'settings' => 'section_1_background_image', 'section' => 'section_1', 'priority' => 10, ) ) ); 

Имя в WP_Customize_Image_Control должно совпадать с именем параметра.

Вы ссылаетесь на section_1_background_image_control , а имя параметра – section_1_background_image .

РЕДАКТИРОВАТЬ

Чтобы ваше изображение появилось, вам нужно добавить свой javascript (я следую двадцать пятнадцати темам здесь)

 ( function( $ ) { var style = $( '#twentysixteen-color-scheme-css' ), api = wp.customize; if ( ! style.length ) { style = $( 'head' ).append( '<style type="text/css" id="twentysixteen-color-scheme-css" />' ) .find( '#twentysixteen-color-scheme-css' ); } api( 'section_1_background_image', function( value ) { value.bind( function( newval ) { var background_image = 'body{ background-image: url( ' + newval + '); }' style.text( background_image ); } ); } ); } )( jQuery ); 

Где вы переключаете все свои живые изменения. Я добавил изображение в body , но вы можете изменить его на #wrapper-1

 var background_image = '#wrapper-1{ background-image: url( ' + newval + '); }' 

EDIT 2

Это также работает для меня:

 wp.customize( 'section_1_background_image', function( value ) { value.bind( function( newval ) { $('body').css('background-image', 'url("' + newval + '")' ); } ); } ); 

Просто замените body на #wrapper-1 .

Просто понял, вы сказали, что при сохранении изображения обертка не сохранила изображение. Вы создали dynamic-css.php где вы поместите все пользовательские css?

Обычно я создаю dynamic-css.php где я $custom_css переменную $custom_css и $custom_css результаты настройки.

 $section_1_background_image= get_theme_mod( 'section_1_background_image', '' ); if ( '' !== $section_1_background_image) { $custom_css .= '#wrapper-1{background-image: url("' . esc_attr( $body_background ) . '");}'; } 

Затем я определяю одну и ту же переменную в моих functions.php и добавляю ее как встроенный стиль:

 $custom_css = ''; wp_add_inline_style( 'main_css', $custom_css ); 

Где main_css – имя крюка, где вы вызываете get_stylesheet_uri() . Этот код должен идти после основного символа таблицы стилей.

Как оказалось, правильный код для его отображения в Настройщике был:

 wp.customize( 'section_1_background_image', function( value ) { value.bind( function( newval ) { $('#wrapper-1').css('background-image', 'url("' + newval + '")' ); } ); } ); 

Однако это не проблема для правильного сохранения его на передней панели. Это было решено здесь .