WP_Customize_Control을 확장하는 방법

라이브 미리보기 사용자 정의 패널에 새로운 종류의 컨트롤을 추가하는 방법을 찾고 있습니다. 사용하여 패널에 새 섹션을 추가하는 방법을 보았습니다.
add_action( 'customize_register'...

구현하려는 컨트롤은 다른 종류의 색상 선택기입니다. 에서 이전 후 , 우리는 위젯을 추가하는 코어 클래스를 확장하는 방법을 볼 수 있지만, 내가 여기에 부족한 것은 범위에 내 목적을 가지고 저를있게 훅입니다 – WP_Customize_Palette_Control. 에서

여기에서 코드시작 부분을 볼 수 있습니다 . 이 코드는 functions.php내 테마 파일에 있습니다.

도움을 주셔서 감사합니다. 롭

코드를 방금 업데이트했습니다. 이제 require_once수업을 가져와야합니다. 이제 PHP 오류가 없지만 새로운 컨트롤 HTML이 나타나지 않습니다.

<?php

require_once( ABSPATH . WPINC . '/class-wp-customize-setting.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-section.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-control.php' );

class WP_Customize_Palette_Control extends WP_Customize_Image_Control {
        public $type    = 'palette';
        public $removed = '';
        public $context;

        public function enqueue() {
                //wp_enqueue_script( 'wp-plupload' );
        }

        public function to_json() {
                parent::to_json();

                $this->json['removed'] = $this->removed;

                if ( $this->context )
                        $this->json['context'] = $this->context;
        }

        public function render_content() {
                ?>
                <label>
                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
                        <div>
                                <a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a>
                                <a href="#" class="remove"><?php _e( 'Remove' ); ?></a>
                        </div>
                </label>
                <?php
        }
}

//new WP_Customize_Palette_Control();


//add_action('customize_controls_init', 'WP_Customize_Palette_Control');

// add an option to the customize panel

function sci_customize_controls_init($wp_customize) {
    $wp_customize->add_section( 'themename_color_scheme', array(
        'title'          => __( 'Color Scheme', 'themename' ),
        'priority'       => 35,
    ) );

    $wp_customize->add_setting( 'themename_theme_options[color_scheme]', array(
    'default'        => 'some-default-value',
    'type'           => 'option',
    'capability'     => 'edit_theme_options',
) );


$wp_customize->add_control( 'themename_color_scheme', array(
    'label'      => __( 'Color Scheme', 'themename' ),
    'section'    => 'themename_color_scheme',
    'settings'   => 'themename_theme_options[color_scheme]',
    'type'       => 'palette',
    'choices'    => array(
        'value1' => 'Choice 1',
        'value2' => 'Choice 2',
        'value3' => 'Choice 3',
        ),
) );

}

add_action( 'customize_register', 'sci_customize_controls_init' );


답변

사용 예 및 클래스

내 현재 테마에서 이것을 사용하는 방법을 볼 수 있습니다. 또한 클래스를 사용할 수 있습니다. Github 에서이 클래스 를 참조하십시오 functions.php.

시작 및 초기화

customize_register 후크 를 통해 테마 사용자 정의 프로그램에 대한 사용자 정의 설정을 등록 할 수 있습니다 .

add_action( 'customize_register', 'themedemo_customize' );
function themedemo_customize($wp_customize) {

    $wp_customize->add_section( 'themedemo_demo_settings', array(
        'title'          => 'Demonstration Stuff',
        'priority'       => 35,
    ) );

    $wp_customize->add_setting( 'some_setting', array(
        'default'        => 'default_value',
    ) );

    $wp_customize->add_control( 'some_setting', array(
        'label'   => 'Text Setting',
        'section' => 'themedemo_demo_settings',
        'type'    => 'text',
    ) );

    $wp_customize->add_setting( 'some_other_setting', array(
        'default'        => '#000000',
    ) );

    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'some_other_setting', array(
        'label'   => 'Color Setting',
        'section' => 'themedemo_demo_settings',
        'settings'   => 'some_other_setting',
    ) ) );

}

테마 사용법 :

아래 예와 같이 ↓를 사용하십시오.

echo 'some_setting => ' .get_theme_mod( 'some_setting', 'default_value' )."\n";
echo 'some_other_setting => ' .get_theme_mod( 'some_other_setting', '#000000' )."\n";
echo 'non_existent_setting => '.get_theme_mod( 'non_existent_setting', 'default_value' )."\n";

조정

컨트롤을 변경할 수도 있습니다.

$wp_customize->add_control( 'themename_color_scheme', array(
    'label'      => __( 'Color Scheme', 'themename' ),
    'section'    => 'themename_color_scheme',
    'settings'   => 'themename_theme_options[color_scheme]',
    'type'       => 'radio',
    'choices'    => array(
        'value1' => 'Choice 1',
        'value2' => 'Choice 2',
        'value3' => 'Choice 3',
        ),
) );

기본 제어 유형은 text입니다. 텍스트 상자 컨트롤을 만듭니다. 또 다른 컨트롤 유형은 dropdown-pages입니다. WordPress 페이지의 드롭 다운 목록을 만듭니다.

그러나 이것이 전부는 아닙니다. 실제로 몇 가지가 더 있지만 사용자 정의이기 때문에 다르게 선언됩니다.

이것은 OOP를 사용합니다.

$wp_customize->add_control(
    new WP_Customize_Color_Control( $wp_customize, 'link_color', array(
        'label'    => __( 'Link Color', 'themename' ),
        'section'  => 'themename_color_scheme',
        'settings' => 'themename_theme_options[link_color]',
    ) )
);

추가 사항 :

  • WP_Customize_Upload_Control– 파일 업로드 상자를 제공합니다. 그러나 직접 사용하지 않을 수도 있습니다. 다음과 같이 다른 용도로 확장하고 싶을 것입니다.
    WP_Customize_Image_Control– 이미지 선택기와 업 로더 상자를 제공합니다. 업로드 컨트롤러를 확장합니다. 사용자가 배경 이미지가 될 새 파일을 업로드 할 수있는 사용자 정의 배경 부분에서 실제로 볼 수 있습니다.
  • WP_Customize_Header_Image_Control– 헤더 부분의 크기를 조정 조치,이 특수 처리 및 디스플레이의 비트를 필요로하기 때문에, 그래서이 WP_Customize_Header_Image_Control확장
  • WP_Customize_Image_Control그 기능을 추가합니다. 사용자 정의 헤더 부분에서 실제로 볼 수 있으며 사용자는 헤더 이미지가 될 새 파일을 업로드 할 수 있습니다.

블로그 테마”에 대한 자세한 내용은 ottos 블로그를 참조하십시오 .

2012 년 11 월 6 일 업데이트

읽기 가능성과 더 많은 예제를위한 라이브 예제 는 소스 및 doku에 대한 공개 저장소 를 참조하십시오 .

2013 년 1 월 15 일 업데이트

우리는 github에서 사용자 정의 클래스 를 사용하여 쉽고 빠르게 사용할 수있는 저장소를 만들었습니다 . 어쩌면 당신은 그것을 사용하거나 아이디어와 솔루션으로 발전 할 수 있습니다.


답변

좋아, 여기에 방법이 있습니다. 제어 클래스를 하나 이상의 새 파일로 분리하십시오.

customize_register에 함수 또는 메소드가 연결되어 있습니까? 해당 기능 또는 방법에서 사용자 정의 컨트롤을 추가하기 직전에 새 파일을 한 번만 요구하십시오. 그러면 PHP는 클래스 재정의에 대해 불평하지 않습니다.

참고 : 이것은 즉시 작동하지는 않지만 트릭을 보여줍니다.

add_action('customize_register', array('myAddControl', 'customize_register') );

class myAddControl{
public function customize_register()
{
    global $wp_customize;


            //This will do the trick
    require_once(dirname(__FILE__).'/class-gctfw-theme-control.php');


    $wp_customize->add_section( 'gctfw_switch_theme' , array(
        'title'      => 'Switch theme',
        'priority'   => 25,
    ) );

    $wp_customize->add_setting( 'gctfw_select_theme' , array(
        'default'     => $wp_customize->theme()->get('Name'),
        'transport'   => 'refresh',
        'capabilities' => 'manage_options'
    ) );

    $myControl = new gctfw_Theme_Control( $wp_customize, 'gctfw_select_theme', array(
        'label'        => __( 'Select theme', 'mytheme' ),
        'section'    => 'gctfw_switch_theme',
        'settings'   => 'gctfw_select_theme',
    ) ) ;
    $wp_customize->add_control( $myControl );
    }
}//class

답변

당신은 수업을 사용하지 않습니다. 클래스의 새 인스턴스를 add_control 메소드에 전달하십시오.

$control_args = array(
  // your args here
);

$my_control = new WP_Customize_Palette_Control(
                $wp_customize, 'themename_color_scheme', $control_args);

$wp_customize->add_control($my_control);

또한 WP는 설정의 옵션 이름이 배열의 일부라는 것을 알고 있다고 생각하지 않습니다. 아마도 themename_theme_options_color_scheme대신 대신 하는 것이 좋습니다 themename_theme_options[color_scheme].

확장 클래스는 이미지 업로드 컨트롤에 속합니다. 색상 선택기를 만드는 경우 WP_Customize_Control 클래스를 확장해야합니다 .


답변

완전성을 위해 : 테마 사용자 정의 프로그램에 숫자 필드를 추가하는 방법에 대한 예.

class Customize_Number_Control extends WP_Customize_Control
{
    public $type = 'number';

    public function render_content()
    {
        ?>
        <label>
            <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
            <input type="number" size="2" step="1" min="0" value="<?php echo esc_attr(  $this->value() ); ?>" />
        </label>
        <?php
    }
}

답변

WP_Customize 전에 백 슬래시를 추가해야한다고 생각합니다. 그래서 그것은

class WP_Customize_Palette_Control extends \WP_Customize_Image_Control

백 슬래시 는 WP_Customize_Image_Control이 동일한 네임 스페이스에 있지 않다고 가정 했기 때문에

도움이되었는지 알려주세요