CMB2 nestable list field type 01

The non trivial matter of saving a nested list.

The problem

I’ve embarked on the quest to create some custom field types for the Custom Meta Boxes 2 WordPress plugin and I’ve had a measure of success in implementing a nested sortable list control based on the Nestable.js library.
The problem is, though, with dynamic content.
Right now the field will take an option input like this (see CMB2 documentation for usage guide)

    'name' => 'Nested list field',
    'desc' => 'A nested list field',
    'id' => $prefix . 'nested_list',
    'type' => 'tad_nested_list',
    'options' => array(
        array('id' => 1, 'text' => 'One'),
        array('id' => 2, 'text' => 'Two'),
        array('id' => 3, 'text' => 'Three',),
        array('id' => '3.1', 'text' => ''),
        array('id' => '3.2', 'text' => 'Three.two'),
        array('id' => 4, 'text' => 'Four'),
        array('id' => 5, 'text' => 'Five'),
        array('id' => 6, 'some' => 'some')

to output a nested list like this one Nestable list input that, Nestable.js providing the magic, could be sorted like this Nestable list output And that’s tagged 0.1.1 on GitHub.

Dynamic options?

The static list of options above might be replaced by the output of a method updating and serving them from a variable list

    'name' => 'Nested list field',
    'desc' => 'A nested list field',
    'id' => $prefix . 'nested_list',
    'type' => 'tad_nested_list',
    'options' => CustomPostType::get_list()

and that method might have a sudo code like this one

public static function get_list(){
    $posts = get_posts(array(
        'post_type' => self::$type,
        'posts_per_page' => -1

    $list = array();

    foreach($posts as $post){
        $list[] = array(
            'id' => $post->ID,
            'text' => $post->post_title

    return $list;

where the number and data present in the list might vary between each admin render.


I will deal with option plucking and updating.