Reputation: 1584
I am building a set of forms shortcodes in Wordpress. I have given up trying to get the form processing script into a shortcode and am just going to make it available to all pages.
There is however an echo that puts out the response of the form which I want to put into it's own shortcode.
<?php echo $response; ?>
This needs to go at the top of the form so that validation messages appear in the right place.
Total form processing code:
<?php
//response generation function
$response = "";
//function to generate response
function my_contact_form_generate_response($type, $message){
global $response;
if($type == "success") $response = "<div class='callout success'><p>{$message}</p></div>";
else $response = "<div class='callout error'><p>{$message}</p></div>";
}
// response messages
$not_human = "Please fill out the human verification field to prove you are not a spam robot. A number 2 will do the job nicely.";
$missing_content = "It looks like we are missing something. Please chek the form below.";
$email_invalid = "That email Address doesn't look quite right.";
$message_unsent = "Your message wasn't sent. Please have another go. If it still doesn't work then please call us using the number supplied.";
$message_sent = "Thank you for your enquiry. We will be in contact shortly.";
// user posted variables
$business_name = $_POST['message_business_name'];
$first_name = $_POST['message_first_name'];
$last_name = $_POST['message_last_name'];
$email = $_POST['message_email'];
$phone = $_POST['message_phone'];
$human = $_POST['message_human'];
$location = $_POST['location'];
$message_opt_in = $_POST['message_opt_in'];
$optin = "";
if ($message_opt_in == "on"){
$optin = "The user has opted in to marketing emails";
}
else {
$optin = "!!!!!!!!!!!!!!!!!!!!!!\n\n The user has NOT opted in to marketing emails! \n\n!!!!!!!!!!!!!!!!!!!!!!\n\n";
}
$body = "$optin \n\n\n\n This message was sent from xxx.com $location\n\nBusiness name: $business_name \nName: $first_name \nName: $last_name \nEmail: $email \nPhone: $phone";
//php mailer variables
$to ="[email protected]";
$subject = "Someone sent a message from ".get_bloginfo('name');
$headers = 'From: '. $email . "\r\n" .
'Reply-To: ' . $email . "\r\n";
if(!$human == 0){
if($human != 2) my_contact_form_generate_response("error", $not_human); //not human!
else {
//validate email
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
my_contact_form_generate_response("error", $email_invalid);
else //email is valid
{
//validate presence of name and message
if(empty($business_name) || empty($first_name) || empty($email)){
my_contact_form_generate_response("error", $missing_content);
}
else //ready to go!
{
$sent = wp_mail($to, $subject, strip_tags($body), $headers);
if($sent) my_contact_form_generate_response("success", $message_sent); //message sent!
else my_contact_form_generate_response("error", $message_unsent); //message wasn't sent
}
}
}
}
else if ($_POST['submitted']) my_contact_form_generate_response("error", $missing_content);
?>
<?php echo $response; ?>
I have tried amongst other things that would probably make a PHP dev laugh.
function form_response(){
echo $response;
}
function form_response(){
echo '<?php echo "$response"; ?>';
}
Disclaimer I'm not a PHP developer as you can probably tell.
Upvotes: 3
Views: 359
Reputation: 1584
I had to call $response from global
function form_response(){
echo $GLOBALS["response"];
}
Upvotes: 0
Reputation: 3009
Try to change
else if ($_POST['submitted']) my_contact_form_generate_response("error", $missing_content);
To
else if ($_POST['submitted']){
$response = 'Some things';
$response .= my_contact_form_generate_response("error", $missing_content);
return $response;
}
Upvotes: 0
Reputation: 15609
In the my_contact_form_generate_response
function, you can do return $response;
at the very bottom before the closing }
for the function.
Then, you can do echo my_contact_form_generate_response($type, $message);
and it will echo the return
value, which will be $response
in this case.
Upvotes: 2