Entrées multiples dans un contrôle de personnalisation


16

Disons que j'ai un seul contrôle personnalisé, mais ce contrôle a 2 entrées qui nécessitent une sauvegarde, par exemple:

  • Type et valeur de la devise
  • Taille et unité de mesure
  • Nom et prénom
  • Texte et style
  • Image et taille d'image
  • Famille de police et poids de police

Comment le ferais-je? Je vois qu'il y a une option de paramètres lors de la création d'un contrôle, mais il n'y a aucune documentation pour suggérer comment il est utilisé, et le seul exemple de ce qui se fait dans la nature est Easy Google Fonts, qui n'a aucune explication sur la façon dont il est fait, et est difficile à lire. Est-il possible d'imbriquer des contrôles et des sections?

Jusqu'à présent, tous les didacticiels et la documentation que j'ai trouvés parlent d'un contrôle avec une seule entrée html, aucun ne mentionne les contrôles qui ont plusieurs entrées / paramètres, bien qu'il soit suggéré par l'API


Le contrôle personnalisé est-il utilisé avec l'API de personnalisation du thème WordPress: codex.wordpress.org/Theme_Customization_API ou l'API Paramètres: codex.wordpress.org/Settings_API ?
Rachel Baker

le mod du thème est ce que mes tests ont utilisé jusqu'à présent, bien que je n'aie aucune préférence pour l'un et pour l'autre et accepterai une explication pour l'un ou l'autre ou les deux
Tom J Nowell

Réponses:


17

Ce plugin montre comment le faire. À noter, les étapes impliquées sont les suivantes:

  • Enregistrez chaque paramètre pour mettre à jour / modifier
  • Lors de la création du contrôle, passez un tableau comme argument de paramétrage
  • Lors du rendu des entrées, passez la clé des paramètres pour lier et valoriser
  • La clé des paramètres n'est pas le nom du paramètre, mais les indices du tableau, par exemple 0, 1, 2
  • Accéder aux paramètres enregistrés sur un contrôle via $this->settings

Voici le code:

<?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
Juste ce dont j'avais besoin, maintenant je peux aller dormir en paix
chifliiiii
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.