Retrieve create node form. Why cant save send values? I want to add a custom page for creating "blog post". Ive got a node blog. So I write something like this:

function module_menu() {
    $items = array();

    $items['user/%/edit/blog/add'] = array(
            'title' =&gt; 'Add blog post',
            'page callback' =&gt; 'drupal_get_form',
            'page arguments' =&gt; array('module_add_blog',1),
            'access arguments' =&gt; array('createBlog'),
            'type' =&gt; MENU_CALLBACK,

    );
return $items;
}


And then in module_add_blog callback:

function module_add_blog(&amp;$form_state, $arg) {
    $form = array();

    $id = intval($arg);
    if ($id == 0){
        drupal_set_message('ID must be an integer.' , '$error');
        return;
    }

    $user = user_load($id);
    module_load_include('inc', 'node', 'node.pages');
    $node = array('uid' =&gt; $user-&gt;uid, 'name' =&gt; $user-&gt;name, 'type' =&gt; 'blog');


    $form = drupal_retrieve_form('blog_node_form', $form_state, $node);
    drupal_prepare_form('blog_node_form', $form, $form_state);
    return $form;
}


Form is rendered in path user/1/edit/blog/add but when I send data it is NOT SAVED.

Any ideas how fix it? Thanks
I think you're confusing Drupal by having a form within a form so-to-speak. I think it would be a lot easier to define a proxy function for the node form so you don't need to worry about doing so:

function module_menu() {
  $items['user/%/edit/blog/add'] = array(
    'title' =&gt; 'Add blog post',
    'page callback' =&gt; 'module_blog_form_proxy',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array('createBlog'),
    'type' =&gt; MENU_CALLBACK,
  );

  return $items;
}

function module_blog_form_proxy($uid) {
  // Validitiy checks etc...

  $user = user_load($uid);
  $node = array('uid' =&gt; $user-&gt;uid, 'name' =&gt; $user-&gt;name, 'type' =&gt; 'blog');

  module_load_include('inc', 'node', 'node.pages');
  return drupal_get_form('blog_node_form', $node);
}