2014-03-26 27 views
0

我使用了我已经使用了一段时间的自定义窗体。表单通过PHP在同一页面上进行验证,并将结果返回给同一页面上的用户。Wordpress中的自定义窗体操作

我正在构建我的第一个WordPress网站,并且似乎对表单操作有问题。我尝试了几个路径进行此操作,但它返回到404页面,并且电子邮件无法发送。

我不确定这个表单方法是否可以在WP中工作,或者我只是一个哑巴的noob。 (我打赌后面)。

我宁愿不使用表单插件,但如果一切都失败,我可能不得不。

这里的任何帮助深表感谢

<?php 

    /* 
     Template Name:Contact Page 
    */ 

?> 

<?php 
if($_POST) 
{ 
$javascript_enabled = trim($_POST['browser_check']); 
$contact_name = trim($_POST['name']); 
$email = trim($_POST['email']); 
$antispam = trim($_POST['AntiSpam']); 
$msg = trim($_POST['msg']); 
//mail settings 
$enquiry_address = "[email protected]"; 
$headers = "From: ".$email; 
$message = "Contact name: $contact_name\nContact Email: $email\nMessage: $msg"; 
$to = $enquiry_address; 
$antispam_answer = "35"; 
    if ($name == "") 
    { 
     $result = "Please enter your NAME"; 
    } 
    elseif (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/", $email)) 
    { 
     $result = "Enter a valid EMAIL address"; 
    } 
    elseif($antispam <> $antispam_answer) { 
    $result = "The Anti-Spam answer is not correct."; 
    } 
    elseif (strlen($msg) < 10) 
    { 
     $result = "Message must be more than 10 characters"; 
    } 
    else 
    {   
      mail($to, $subject, $message, $headers); 
     if($selfcopy == "yes") 
      mail($email, $subject, $message, $headers); 
     $result = "Your mail has been sent succesfully! Thanks for your enquiry";  
    } 
} 
    if($javascript_enabled == "true") { 
     echo $result; 
     die(); 
    } 
?> 

<?php get_header(); ?> 

<div class="content"> 

    <div class="row"> 
     <div id="map"></div> 
    </div> 

    <div class="main2"> 

    <div class="row narrow clearfix"> 

     <div class="half"> 


      <form name="contactform" id="form" method="post" action="" class="clearfix"> 

       <div id="result"><?php if($result) echo "<div class='message'>".$result."</div>"; ?></div> 

       <input type="text" class="text" placeholder="CONTACT NAME *" required name="name" value="<?php echo $contact_name; ?>" /> 

       <input type="email" class="text" placeholder="CONTACT EMAIL ADDRESS *" required name="email" value="<?php echo $email; ?>" /> 

       <input type="text" name="AntiSpam" class="text" maxlength="2" required placeholder="ANTISPAM - WHAT IS 20 + 15 ? *" /> 

       <textarea class="textarea" name="msg" placeholder="YOUR MESSAGE *" required value="<?php echo $msg; ?>" ></textarea> 

       <input type="submit" name="submit" value="SEND" id="submit"/> 

      </form> 


      <script type="text/javascript"> 
       document.contactform.browser_check.value = "true"; //sets the hidden input(browser_check) value as true if the javascript is enabled. 
       $("#submit").click(function(){ 
       $('#result').html('<img src="_images/loading.gif" class="loading-img" alt="loader image">').fadeIn(); 
       var input_data = $('#form').serialize(); 
       $.ajax({ 
       type: "POST", 
       url: "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>", 
       data: input_data, 
       success: function(msg){ 
       $('.loading-img').remove(); //Removing the loader image because the validation is finished 
       $('<div class="message">').html(msg).appendTo('div#result').hide().fadeIn('slow'); //Appending the output of the php validation in the html div 
       }      
       }); 
       return false; 
       }); 
      </script> 
     </div><!--/half--> 

     <div class="half last"> 

     </div><!--/half--> 
    </div><!--/row--> 
    </div><!--/main--> 

</div><!--/content--> 

<?php get_footer(); ?> 

回答

1

请使用下面的代码它会帮助你

<form name="contactform" id="form" method="post" action="<?php echo get_permalink($page_id); ?>" class="clearfix"> 


</form> 

在表单操作使用get_permalink()函数来设置表单操作页面的URL。

+0

感谢您的回复。我已经尝试过了。它返回到联系页面的url,但显示404。我在测试网站上设置了类似的操作。你可以在mondoloco.esksidedesign.co.uk看到它。我一直在尝试我在这里和其他网站找到的所有种类,但都没有运气。 – Kev

+0

你的答案是谢谢你的答案。我曾经使用过这种方法,但是我意识到我在其他地方有一个问题。似乎wordpress不喜欢字段名称被命名为某些东西。再次感谢 – Kev

+0

ok.Yes也在输入字段名称中发布。请避免字段名称,如“email”,“name”等。 –

0

一个解决方案,为我工作:

之前提交表单,如果您使用的是:

<input type="text" name="name" value=""> 

然后,你必须将其替换为:

<input type="text" name="myname" value=""> 

name="name"停止表单在WordPress的行动...