I just solved it!
The problem was, that the php request handling works different in wordpress.
There has to be a workaround with a admin_post.php hook:
Instead of if( isset($_POST['email']) && isset($_POST['title']) ){...}
I had to use this hook:
add_action( 'admin_post_nopriv_process_form', 'process_form_data' );
add_action( 'admin_post_process_form', 'process_form_data' );
function process_form_data() {
my_function($_POST['email'],$_POST['title']);
wp_redirect($_POST['url']);
}
A hidden form field is used to hook in this function. For the redirect, I created another hidden field in the form, to redirect to user back to the previous site:
$current_url="//".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
//...
$result .= '<input type="hidden" name="url" value="'.$current_url.'">'; //redirect
$result .= '<input type="hidden" name="action" value="process_form">'; //hook
Source: adaptiveweb.com