是否可以在使用CMB2添加元框后,为后端的用户添加按钮以点击它,它将生成相同的元数据类似添加新按钮,用户可以添加尽可能多的元框与他/她想要的相同类型。那可能吗?
答案 0 :(得分:1)
这是通过字段类型“group”完成的。虽然这在技术上并不能使整个元数据库重复,但如果将所需的所有字段都放在组中,它仍然可以实现您正在寻找的结果。
基本上,您添加字段组,然后对组中所需的每个字段使用add_group_field()
函数。您仍然像普通一样设置元数据,并添加组字段,然后添加您想要的任何其他字段。
作为示例,我设置了一个以$cmb_infobox
为变量的元数据箱。我的小组字段如下所示:
<?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
,然后您将直接看到覆盖它的部分。