커 스터 마이저 컨트롤의 다중 입력


16

단일 사용자 지정 컨트롤이 있지만이 컨트롤에 저장해야하는 두 가지 입력이 있습니다.

  • 통화 유형 및 값
  • 크기와 측정 단위
  • 이름과 성
  • 텍스트와 스타일
  • 이미지 및 이미지 크기
  • 글꼴 모음 및 글꼴 무게

어떻게합니까? 컨트롤을 만들 때 설정 옵션이 있지만 컨트롤 사용 방법을 제안하는 설명서가 없으며 야생에서 수행되는 유일한 예는 Easy Google Fonts입니다. 어떻게 수행했는지에 대한 설명이 없습니다. 읽기 어렵다. 컨트롤과 섹션을 중첩 할 수 있습니까?

지금까지 내가 찾은 모든 자습서와 문서는 단일 HTML 입력으로 컨트롤에 대해 이야기하지만 API에서 제안했지만 여러 입력 / 설정이있는 컨트롤은 언급하지 않았습니다.


사용자 정의 제어는 WordPress 테마 사용자 정의 API : codex.wordpress.org/Theme_Customization_API 또는 설정 API : codex.wordpress.org/Settings_API 와 함께 사용 됩니까 ?
Rachel Baker

테마 모드는 내 테스트가 지금까지 사용한 것인데, 어느 쪽도 선호하지 않으며 둘 중 하나 또는 둘 다에 대한 설명을 받아들입니다.
Tom J Nowell

답변:


17

이 플러그인은이를 수행하는 방법을 보여줍니다. 참고로 관련된 단계는 다음과 같습니다.

  • 업데이트 / 변경할 각 설정 등록
  • 컨트롤을 만들 때 배열을 설정 인수로 전달하십시오.
  • 입력을 렌더링 할 때 설정 키를 전달하여 연결 및 값 지정
  • 설정 키는 설정 이름이 아니라 배열의 인덱스 (예 : 0, 1, 2)입니다.
  • 통해 컨트롤에 등록 된 설정에 액세스 $this->settings

코드는 다음과 같습니다.

<?php
/*
Plugin Name: TJN Typography Control Demo
Author: Tom J Nowell
Version: 1.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/

add_action( 'customize_register', 'tjn_customize_register' );
function tjn_customize_register( $wp_customize ) {
    if ( ! isset( $wp_customize ) ) {
        return;
    }
    if ( class_exists( 'WP_Customize_Control' ) ) {

        class Toms_Control_Builder extends WP_Customize_Control {

            public $html = array();

            public function build_field_html( $key, $setting ) {
                $value = '';
                if ( isset( $this->settings[ $key ] ) )
                    $value = $this->settings[ $key ]->value();
                $this->html[] = '<div><input type="text" value="'.$value.'" '.$this->get_link( $key ).' /></div>';
            }

            public function render_content() {
                $output =  '<label>' . $this->label .'</label>';
                echo $output;
                foreach( $this->settings as $key => $value ) {
                    $this->build_field_html( $key, $value );
                }
                echo implode( '', $this->html );
            }

        }

        $section = new TJN_Customizer_Section( $wp_customize, 'test', 'Test', 11 );
        $field = new TJN_Customizer_Field( 'testfield','','Test Control' );
        $field->add_to_section( $wp_customize, $section );
    }
}


class TJN_Customizer_Section {
    public $name='';
    public $pretty_name='';
    public function __construct( WP_Customize_Manager $wp_customize, $name, $pretty_name, $priority=25 ) {
        $this->name = $name;
        $this->pretty_name = $pretty_name;

        $wp_customize->add_section( $this->getName(), array(
            'title'          => $pretty_name,
            'priority'       => $priority,
            'transport'      => 'refresh'
        ) );
    }

    public function getName() {
        return $this->name;
    }
    public function getPrettyName() {
        return $this->pretty_name;
    }
}

class TJN_Customizer_Field {

    private $name;
    private $default;
    private $pretty_name;

    public function __construct( $name, $default, $pretty_name ) {
        $this->name = $name;
        $this->default = $default;
        $this->pretty_name = $pretty_name;
    }

    public function add_to_section( WP_Customize_Manager $wp_customize, TJN_Customizer_Section $section ) {

        $wp_customize->add_setting( $this->name, array(
            'default'        => $this->default,
            'type'           => 'theme_mod',
            'capability'     => 'edit_theme_options'
        ) );
        $wp_customize->add_setting( 'moomins', array(
            'default'        => $this->default,
            'type'           => 'theme_mod',
            'capability'     => 'edit_theme_options'
        ) );
        $wp_customize->add_setting( 'papa', array(
            'default'        => $this->default,
            'type'           => 'theme_mod',
            'capability'     => 'edit_theme_options'
        ) );

        $control = new Toms_Control_Builder(
            $wp_customize, $this->name, array(
            'label'    => $this->pretty_name,
            'section'  => $section->getName(),
            'settings'   => array (
                $this->name,
                'moomins',
                'papa'
            )
        ) );

        $wp_customize->add_control( $control );
    }
}

2
내가 필요한 것, 이제 안심하고 잠을 잘 수 있습니다
chifliiiii
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.