Nhiều đầu vào trong một điều khiển tùy biến


16

Giả sử tôi có một điều khiển tùy chỉnh duy nhất, nhưng điều khiển này có 2 đầu vào yêu cầu lưu, ví dụ:

  • Loại tiền tệ và giá trị
  • Kích thước và đơn vị đo lường
  • Họ và tên
  • Văn bản và phong cách
  • Hình ảnh và kích thước hình ảnh
  • Họ phông chữ & trọng lượng phông chữ

Làm thế nào tôi sẽ làm điều đó? Tôi thấy có một tùy chọn cài đặt khi tạo điều khiển, nhưng không có tài liệu nào đề xuất cách sử dụng và ví dụ duy nhất về nó được thực hiện trong tự nhiên là Easy Google Fonts, không có giải thích nào về cách thực hiện và rất khó đọc. Có thể để kiểm soát tổ và các phần?

Cho đến nay tất cả các hướng dẫn và tài liệu tôi đã tìm thấy nói về một điều khiển với một đầu vào html, không đề cập đến các điều khiển có nhiều đầu vào / cài đặt, mặc dù được đề xuất bởi API


Điều khiển tùy chỉnh được sử dụng với API tùy chỉnh chủ đề WordPress: codex.wordpress.org/Theme_Customization_API hoặc API cài đặt: codex.wordpress.org/Sinstall_API ?
Rachel Baker

mod chủ đề là những gì các bài kiểm tra của tôi đã sử dụng cho đến nay, mặc dù tôi không có sở thích nào cả, và sẽ chấp nhận lời giải thích cho người này hoặc người kia hoặc cả hai
Tom J Nowell

Câu trả lời:


17

Plugin này cho thấy làm thế nào để làm điều đó. Lưu ý, các bước liên quan là:

  • Đăng ký từng cài đặt để cập nhật / thay đổi
  • Khi tạo điều khiển, chuyển một mảng làm đối số cài đặt
  • Khi kết xuất các đầu vào, chuyển vào phím cài đặt để liên kết và giá trị
  • Khóa cài đặt không phải là tên của cài đặt, mà là các chỉ số của mảng, ví dụ 0, 1, 2
  • Truy cập các cài đặt đã đăng ký để kiểm soát thông qua $this->settings

Đây là mã:

<?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
Chỉ cần những gì tôi cần, Bây giờ tôi có thể đi ngủ trong yên bình
chifliiiii
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.