2017-12-27 9 views
0

저는 WordPress에서 시작하여 내 사이트를 사용자 정의하기 위해 백엔드에 일부 컨트롤을 추가하려고합니다. 내가 추가 한 첫 번째 컨트롤 인 이미지 선택기는 정상적으로 작동하지만 두 번째 설정 인 background-size는 값을 저장하지 않으므로 페이지를 새로 고친 후 이미지가 style.css 파일의 기본값으로 돌아갑니다. 모든 설정은 새로 고침 할 때까지 올바르게 적용됩니다.wp_customize- 사용자 정의 설정이 저장되지 않았습니다.

있는 style.css :

section#banner { 
background-image: url(images/banner.jpg); 
background-size: auto; 
background-repeat: no-repeat; 
background-position: left top; 
} 

functions.php :

/** 
* Customizer Options for #banner 
* Theme Options Customizer Implementation. 
* 
* @param WP_Customize_Manager $wp_customize Object that holds the customizer data. 
*/ 
function pf_banner_customizer($wp_customize){ 

/* 
* Failsafe is safe 
*/ 
if (! isset($wp_customize)) { 
    return; 
} 

/** 
* Add '#banner' Section. 
*/ 
$wp_customize->add_section(
    // $id 
    'pf_section_banner', 
    // $args 
    array(
     'title'   => __('#banner', 'theme-slug'), 
     'active_callback' => 'is_front_page', 
     'priority' => 1, 
    ) 
); 

/** 
* Add 'Backgrounds Background Image' Setting. 
*/ 
$wp_customize->add_setting(
    // $id 
    'pf_banner_background_image', 
    // $args 
    array(
     'default'  => get_stylesheet_directory_uri() . '/images/welcome-background.jpg', 
     'sanitize_callback' => 'esc_url_raw', 
     'transport'  => 'postMessage' 
    ) 
); 

/** 
* Add 'Backgrounds Background Image' image upload Control. 
*/ 
$wp_customize->add_control(
    new WP_Customize_Image_Control(
     // $wp_customize object 
     $wp_customize, 
     // $id 
     'pf_banner_background_image', 
     // $args 
     array(
      'settings'  => 'pf_banner_background_image', 
      'section'  => 'pf_section_banner', 
      'label'   => __('Backgrounds Background Image', 'theme-slug'), 
     ) 
    ) 
); 

$wp_customize->add_setting(
    // $id 
    'pf_banner_scaling', 
    // $args 
    array(
     'default'  => 'Auto', 
     'sanitize_callback' => 'esc_url_raw', 
     'transport'  => 'postMessage' 
    ) 
); 

$wp_customize->add_control(
    new WP_Customize_Control(
      // $wp_customize object 
      $wp_customize, 
      // $id 
      'pf_banner_scaling', 
      // $args 
      array(
       'label'    => __('Banner Scaling Options', 'theme-slug'), 
       'description' => __('Options for Scaling the background image'), 
       'settings'  => 'pf_banner_scaling', 
       'priority'  => 10, 
       'section'   => 'pf_section_banner', 
       'type'    => 'select', 
       'choices'   => array(
        'auto'  => 'Auto', 
        'cover'  => 'Cover', 
        'contain' => 'Contain', 
        'custom' => 'Custom', 
       ) 
      ) 
    ) 
); 

} 
// Settings API options initilization and validation. 
add_action('customize_register', 'pf_banner_customizer'); 

/** 
* Writes the Backgrounds background image out to the 'head' element of the document 
* by reading the value from the theme mod value in the options table. 
*/ 
function pf_change_background_img() { 
?> 
<style type="text/css"> 
    <?php 
     if (get_theme_mod('pf_banner_background_image')) { 
      $banner_background_image_url = get_theme_mod('pf_banner_background_image'); 
     } else { 
      $banner_background_image_url = get_stylesheet_directory_uri() . '/images/welcome-background.jpg'; 
     } 
     section#banner { 
      background-image: url(<?php echo $banner_background_image_url; ?>); 
     } 
    <?php // } // end if ?> 
</style> 
<?php 

} // end pf_customizer_css 
add_action('wp_head', 'pf_change_background_img'); 

function pf_change_background_size() { 
?> 
<style type="text/css"> 
<?php 
    $bg_size = get_theme_mod('pf_banner_scaling'); 
     ?> 
     section#banner { 
      background-size: <?php echo $bg_size; ?>; 
      background-color: '#00ffff' 
     } 
     ?> 
</style>; 
<?php 
} 
add_action('wp_head', 'pf_change_background_size'); 

/** 
* Registers the Theme Customizer Preview with WordPress. 
* 
* @package sk 
* @since  0.3.0 
* @version 0.3.0 
*/ 
function pf_customizer_live_preview() { 
wp_enqueue_script(
    'pf-theme-customizer', 
    get_stylesheet_directory_uri() . '/js/theme-customizer.js', 
    array('customize-preview'), 
    '0.1.0', 
    true 
); 
} // end pf_customizer_live_preview 
add_action('customize_preview_init', 'pf_customizer_live_preview'); 

JS/테마 - 여기 내 코드는 배경 이미지와 배경 사이즈 모두 지금까지의

맞춤 설정 도구 .js :

(function($) { 
    "use strict"; 
    // Image Control for section#banner 
    wp.customize('pf_banner_background_image', function(value) { 
     value.bind(function(to) { 
      $('#banner').css('background-image', 'url(' + to + ')'); 
     }); 
    }); 

})(jQuery); 

(function($) { 
    "use strict"; 
    // Image Scaling Option for section#banner 
    wp.customize('pf_banner_scaling', function(value) { 
     value.bind(function(to) { 
      $('#banner').css('background-size', to); 
     }); 
    }); 

})(jQuery); 

코드 벽에 죄송합니다.

내가 새로 고침 후

, 드롭 다운 컨트롤이 비어 :

여기에 관련된 질문입니다. 나는 현재 값이나 기본값 인 둘 다 'auto'를 보여줄 것으로 기대한다.

모든 포인터가 크게 감사드립니다!

답변

0

OK, 직접 발견 : 예제에서 컨트롤을 복사하여 붙여 넣었으며 새니 타이커 콜백도 복사했습니다. 분명히, esc_url_raw는 선택 상자와 함께 사용될 때 이해가되지 않습니다. 대신 이제 sanitize_text_field를 사용할 때 제대로 저장되며 선택기의 값은 다시로드 한 후에도 올바르게됩니다.