Özelleştirici Denetiminde Birden Çok Giriş


16

Tek bir özel denetimim olduğunu varsayalım, ancak bu denetim, örneğin kaydetme gerektiren 2 girişe sahiptir:

  • Para birimi türü ve değeri
  • Boyut ve ölçü birimi
  • Ad ve soyad
  • Metin ve stil
  • Görüntü ve görüntü boyutu
  • Yazı tipi ailesi ve yazı tipi ağırlığı

Bunu nasıl yaparım? Bir denetim oluştururken bir ayar seçeneği olduğunu görüyorum, ancak nasıl kullanıldığını gösteren hiçbir belge yok ve bunun vahşi ortamda yapıldığının tek örneği, nasıl yapıldığına dair hiçbir açıklaması olmayan Kolay Google Yazı Tipleri ve okumak zor. Kontrolleri ve bölümleri yerleştirmek mümkün mü?

Şimdiye kadar bulduğum tüm öğreticiler ve belgeler, tek bir html girişi olan bir kontrol hakkında konuştu, hiçbiri API tarafından önerilmesine rağmen birden fazla giriş / ayar içeren kontrollerden bahsetmiyor.


Özel kontrol WordPress Tema Özelleştirme API'sı ile mi kullanılıyor: codex.wordpress.org/Theme_Customization_API veya Ayarlar API'sı: codex.wordpress.org/Settings_API ?
Rachel Baker

tema modu, testlerimin şimdiye kadar kullandığı şey, her ikisi için de tercihim yok ve biri veya diğeri veya her ikisi için bir açıklama kabul edecek
Tom J Nowell

Yanıtlar:


17

Bu eklenti nasıl yapılacağını gösterir. Dikkat edilmesi gereken adımlar şunlardır:

  • Güncellemek / değiştirmek için her ayarı kaydedin
  • Denetimi oluştururken, ayar bağımsız değişkeni olarak bir dizi iletin
  • Girişleri oluştururken bağlantı kurmak ve değer vermek için ayarlar tuşunu iletin
  • Ayarlar tuşu ayarın adı değil, dizinin dizinleridir, örneğin 0, 1, 2
  • Bir kontrole kaydedilen ayarlara şu yolla erişin: $this->settings

İşte kod:

<?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
Tam ihtiyacım olan şey, Şimdi huzur içinde uyuyabilirim
chifliiiii
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.