我正在使用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;
}
我现在能做什么?
先谢谢
答案 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;
}