Я пытаюсь установить фоновое изображение в 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 + '")' ); } ); } );
Однако это не проблема для правильного сохранения его на передней панели. Это было решено здесь .