CMB 2'添加新按钮'

时间:2015-11-13 17:15:40

标签: wordpress

是否可以在使用CMB2添加元框后,为后端的用户添加按钮以点击它,它将生成相同的元数据类似添加新按钮,用户可以添加尽可能多的元框与他/她想要的相同类型。那可能吗?

1 个答案:

答案 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,然后您将直接看到覆盖它的部分。