创建可在Customizer中添加或删除的内容

时间:2017-05-16 作者:Daniele Squalo

我正在我的主题中使用Wordpress定制器。现在假设我想创建一种具有3个选项的项目(在本例中,一个图像和2个输入),我想让用户创建其中的许多选项。我知道如何创建文本输入:

$wp_customizer->add_setting(\'fantastic-input\', array(
    \'type\' => \'theme_mod\',
    \'default\' => \'Make something fantastic!\'
));

$wp_customizer->add_control(\'fantastic-input-opt\', array(
    \'type\' => \'input\',
    \'section\' => \'fantastic-section\',
    \'settings\' => \'fantastic-input\',
    \'label\' => _(\'Input something fantastic here\'),
    \'description\' => \'This input is fantastic!\'
));
并添加图像选择器:

$wp_customizer->add_setting(\'fantastic-image\', array(
    \'type\' => \'theme_mod\',
    \'default\' => \'\'
));

$wp_customizer->add_control(new WP_Customize_Image_Control (
    $wp_customizer,
    \'fantastic-image\',
    array(
        \'label\' => _(\'Best image ever\'),
        \'section\' => \'fantastic-section\',
    )
));
但是如果我不想让这成为唯一的一个呢?非常感谢。

EDIT

我正在考虑一个可能的解决方案,即创建一个包含所有必需字段的自定义控件,扩展WP_Customize_Control. 我可以想一些方法将它们全部编码为json字符串,或者一些使它们易于一起管理的方法。自定义控件的可能代码:

class Custom_Control extends WP_Customize_Control {
    public $type = \'my-custom-control\';

    //As seen by admin
    public function render_content() {
        $picture = new WP_Customize_Image_Control();
        $picture->render_content();
        ?>
        <input type="text" name="title" placeholder="" />
        <input type="text" name="cta" placeholder="" />
        <textarea name="textbody"></textarea>
        <?php
    }
    //Load js to handle this
    public function enqueue () {
        wp_enqueue_script(\'something.js\', \'somepath\', array( \'jquery\' ));
    }
}
这样可以吗?那么图片控件呢?如何将其包括在内?

1 个回复
最合适的回答,由SO网友:Daniele Squalo 整理而成

我最终整合了Kirki 在我的主题中。

How to integrate it:我创建了一个新文件夹,名为includes 在我的主题中。然后,在我的函数中。php,我添加了这一行:

include_once( dirname( __FILE__ ) . \'/include/kirki/kirki.php\' );
Now, the main point: create replicable itemsrepeater. 要使用它(就像使用Kirki的任何控件一样),您需要创建config 和asection, 但设置是自动创建的:

Kirki::add_config(\'awesome_config\', array(
    \'capability\'    => \'edit_theme_options\',
    \'option_type\'   => \'theme_mod\',
));

Kirki::add_section(\'awesome_section\', array(
    \'title\' => _(\'Awesome section\'),
    \'description\' => _(\'\'),
    \'capability\'     => \'edit_theme_options\'
));
现在,记住这两个要素,我们终于可以创建中继器控件了:

Kirki::add_field(\'awesome_config\', array (
    \'type\' => \'repeater\',
    \'settings\' => \'awesome_setting\',
    \'label\' => _(\'Awesome repeater\'),
    \'section\' => \'awesome_section\',
    \'fields\' => array(
        \'field1\' => array(
            \'type\' => \'text\',
            \'label\' => _(\'Field 1\'),
            \'default\' => \'\'
        ),
    \'field2\' => array(
            \'type\' => \'text\',
            \'label\' => _(\'Field 2\'),
            \'default\' => \'\'
        ),
    )
));
如图所示,您不仅可以创建用户可以复制的字段,还可以在其中添加许多字段!

结束

相关推荐