2015-11-13 73 views
1

是否可以在添加一个使用CMB2的元框为后端的用户添加一个按钮来点击后,它会生成相同的元类型,就像添加新按钮一样,用户可以添加尽可能多的他/她想要的相同类型的元框。那可能吗?CMB 2'添加新按钮'

回答

1

这是通过字段类型“group”完成的。虽然这在技术上并不能使整个metabox具有可重复性,但如果将所需的所有字段放入组中,它仍然可以达到您要查找的结果。

基本上,您添加字段组,然后使用组中的每个字段的add_group_field()函数。你仍然像正常一样设置你的metabox,并添加组字段,然后添加你想要的其他字段。

作为一个例子,我设置了一个带有$cmb_infobox作为变量的metabox。我组场看起来是这样的:

<?php 
$group_field_id = $cmb_infobox->add_field(array(
    'id'   => $prefix . 'group', 
    'type'  => 'group', 
    'description' => __('Generates reusable form entries', 'cmb2'), 
    'options'  => array(
     'group_title' => __('Info Box {#}', 'cmb2'), // since version 1.1.4, {#} gets replaced by row number 
     'add_button' => __('Add Info Box', 'cmb2'), 
     'remove_button' => __('Remove Info Box', 'cmb2'), 
     'sortable'  => true, // beta 
     // 'closed'  => true, // true to have the groups closed by default 
    ), 
)); 

您可以添加要在此组中的任何领域,但它只是看起来有些不同,把事情开始,你只需要是该组中唯一的ID。例如,我可以在该组中使用ID为'content'的WYSIWYG字段,而不会与WordPress编辑器发生任何冲突,或者在另一个组字段中使用该ID。正如你所看到的,还有“添加”按钮文本和“删除”按钮文本的数组值。

这里是我重复的信息框组内一个简单的文本字段:

<?php 
$cmb_infobox->add_group_field($group_field_id, array(
    'name' => 'Title', 
    'id' => 'title', 
    'type' => 'text', 
    // 'repeatable' => true, // Repeatable fields are supported w/in repeatable groups (for most types) 
)); 

最重要的区别是第一行和ID。其余的值与正常值相同。确保你有正确的起始变量。

要把它带到前端,你最终会使用一个foreach循环。

这里是我的信息框下降到前端的版本。

<?php 
foreach ((array) $entries as $key => $entry) { 

    // Store field values in variables to use in markup 
    if (isset($entry['icon'])) { 

     $icon = esc_html($entry['icon']); 
    } 

    if (isset($entry['title'])) { 

     $title = esc_html($entry['title']); 
    } 

    if (isset($entry['content'])) { 

     $content = esc_html($entry['content']); 
    } 

    echo $icon; 
    echo $title; 
    echo $content; 
} 

这基本上是如何文档将告诉你做到这一点,但我总是使用括号与条件。

您可以在CMB2字段类型文档中找到更多关于它的信息。 https://github.com/WebDevStudios/CMB2/wiki/Field-Types#file

在字段类型列表中单击group,它会将您带到超出它的部分。

+0

你先生太棒了!谢谢你花时间! – user3768679