在Wordpress中使用CMB2添加带自定义回调函数的自定义元框?

时间:2017-01-23 06:42:52

标签: wordpress wordpress-theming meta-boxes

我正在使用wordpress中的一个项目,我正在使用CMB2插件来构建自定义元框和字段。但在一个案例中,我需要一个带有自定义回调函数的自定义元框,所以我将创建一些自定义动态字段。

我从cmb得到的是添加一个带有自定义回调的元字段,比如

$cmb->add_field( array(
    'name'    => __( 'Test', 'cmb2' ),
    'id'      => $prefix . 'test',
    'type'    => 'text',
    'default' => 'prefix_set_test_default',
) );

回调:

function prefix_set_test_default( $field_args, $field ) {
    return my_custom_fields;

}

我现在能做什么?

先谢谢

2 个答案:

答案 0 :(得分:2)

您必须从CMB2的回调函数返回一个关联数组,以生成自定义字段。

以下是有关如何从自定义帖子类型返回帖子下拉列表的示例:

$cmb->add_field( [
   'name'             => __( 'Posts dropdown', 'cmb2' ),
   'id'               => $prefix . 'dropdown',
   'type'             => 'select',
   'show_option_none' => true,
   'options_cb'       => 'get_my_custom_posts',
] );

回叫功能

function get_my_custom_posts() {
   $posts = get_posts( [ 'post_type' => 'my_custom_post_type' ] );
   $options = [];

   foreach ( $posts as $post ) {
      $options[ $post->ID ] = $post->post_title;
   }

   return $options;
}

答案 1 :(得分:0)

Below is proper way to add custom meta by CMB2 meta box.

add_action( 'cmb2_admin_init', 'cmb2_custom_metaboxes' );


function cmb2_sample_metaboxes() {

     //your custom prefix
     $prefix = '_customprefix_';

     $cmb = new_cmb2_box( array(
        'id'            => 'test_metabox',
        'title'         => __( 'Test Metabox', 'cmb2' ),
        'object_types'  => array( 'page', ), // Post type
        'context'       => 'normal',
        'priority'      => 'high',
        'show_names'    => true, // Show field names on the left
        // 'cmb_styles' => false, // false to disable the CMB stylesheet
        // 'closed'     => true, // Keep the metabox closed by default
    ) );

    // Regular text field
    $cmb->add_field( array(
        'name'       => __( 'Test', 'cmb2' ),
        'desc'       => __( 'field description', 'cmb2' ),
        'id'         => $prefix . 'text',
        'type'       => 'text',
         'default' => 'prefix_set_test_default',
    ) );

    //Add more field as custom meta
}

function prefix_set_test_default($field_args, $field){
     return my_custom_fields;
}