2017-01-23 20 views
1

Я работаю над проектом в wordpress, где я использую плагин CMB2 для создания настраиваемого мета-поля и полей. Но в случае, мне нужен специальный мета-ящик с пользовательской функцией обратного вызова, поэтому внутри я создам некоторые настраиваемые динамические поля.Добавить пользовательский метабокс с пользовательской функцией обратного вызова с использованием CMB2 в Wordpress?

Что я получаю от 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

Вы должны вернуть ассоциативный массив из функции обратного вызова для 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; 
} 
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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^