如何在wordpress中制作联系表格调用另一个php文件

Posted

技术标签:

【中文标题】如何在wordpress中制作联系表格调用另一个php文件【英文标题】:How to make a contact form in wordpress call another php file 【发布时间】:2018-05-05 14:54:46 【问题描述】:

我正在尝试在我的 WordPress 网站的侧边栏中添加一个小型联系表单。我将我的代码从它的原始 html 文件转移到适当的 WordPress php 文件中。唯一不起作用的是联系表格。

当我单击发送按钮时,它会转到 URL 栏中的 mailer.php 文件,而不是发送消息。

这是表格:

<div class="w3-container w3-padding w3-white">
<h4 class="w3-left">Contact</h4>
<br> <br>
<div id="form-messages">&nbsp;</div>
<form id="ajax-contact" class="w3-container w3-margin" action="mailer.php" method="post">
<div class="w3-row w3-section field"><label for="name">Name:</label> <input id="name" class="w3-input w3-border" name="name" required="" type="text"></div>
<div class="w3-row w3-section field"><label for="email">Email:</label> <input id="email" class="w3-input w3-border" name="email" required="" type="email"></div>
<div class="w3-row w3-section field"><label for="message">Message:</label> <textarea id="message" class="w3-input w3-border" name="message" required=""></textarea></div>
<div class="field"><button class="w3-button w3-blue w3-ripple w3-section" type="submit">Send</button></div>
</form></div> 

这是 mailer.php 文件:

<?php
    // My modifications to mailer script from:
    // http://blog.teamtreehouse.com/create-ajax-contact-form
    // Added input sanitizing to prevent injection

    // Only process POST reqeusts.
    if ($_SERVER["REQUEST_METHOD"] == "POST") 
        // Get the form fields and remove whitespace.
        $name = strip_tags(trim($_POST["name"]));
                $name = str_replace(array("\r","\n"),array(" "," "),$name);
        $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
        $message = trim($_POST["message"]);

        // Check that data was sent to the mailer.
        if ( empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) 
            // Set a 400 (bad request) response code and exit.
            http_response_code(400);
            echo "Oops! There was a problem with your submission. Please complete the form and try again.";
            exit;
        

        // Set the recipient email address.
        // FIXME: Update this to your desired email address.
        $recipient = "jerry@jerrylcrews.com";

        // Set the email subject.
        $subject = "New contact from $name";

        // Build the email content.
        $email_content = "Name: $name\n";
        $email_content .= "Email: $email\n\n";
        $email_content .= "Message:\n$message\n";

        // Build the email headers.
        $email_headers = "From: $name <$email>";

        // Send the email.
        if (mail($recipient, $subject, $email_content, $email_headers)) 
            // Set a 200 (okay) response code.
            http_response_code(200);
            echo "Thank You! Your message has been sent.";
         else 
            // Set a 500 (internal server error) response code.
            http_response_code(500);
            echo "Oops! Something went wrong and we couldn't send your message.";
        

     else 
        // Not a POST request, set a 403 (forbidden) response code.
        http_response_code(403);
        echo "There was a problem with your submission, please try again.";
    

【问题讨论】:

【参考方案1】:

在 onClick 事件中添加这样的函数。

function sendmail() 
    var name = document.getElementById("name").value;
    var email = document.getElementById("email").value;
    var message = document.getElementById("message").value;

    var SendInfo=      "name":name,
                        "email":email,
                        "message":message   ;
    $.ajax(
            type: 'POST',
            url: 'mailer.php',
            data: SendInfo,
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            traditional: true,
            success: function (data) 
                // Whatever
            
    );

【讨论】:

你能解释一下吗?我真的可以一步一步地使用它。我也会尝试查找它。非常感谢您提供的任何和所有信息! 这个函数告诉他们的客户端加载url中的文件,在Sendinfo中指定post数据,而不刷新整个页面。如果您从按钮中删除提交类,并将此功能添加为 onClick,它将使用正确的发布数据调用您的 mailer.php,而无需刷新页面。然后它将执行您在 sucess 函数中放置的任何代码(您可以使用它来清除表单数据或弹出警报,告诉他们邮件已发送)。我也会使用 mailer.php 的绝对文件路径,而不是 ajax 请求的相对路径。 Sidenote ajax 在 jquery 库中,所以如果你不熟悉它,你需要确保包含它。如果您想从 mailer.php 页面接收反馈,或者根据回复更新页面上的内容,变量数据也将是您在 mailer.php 中打印的任何内容。 非常感谢。我想我明白了。我在 WordPress 主题中执行此操作,但我不确定如何包含您给我的功能。如果我要让它成为自己的 .js 文件,我将如何让按钮调用它?这可能吗? 是的,如果您将其设为自己的 .js 文件,只要将 .js 包含在某处,就应该可以访问该函数以添加到按钮中。【参考方案2】:

编辑 :: 这将完全停止表单提交。如果您希望表单不会导致页面重定向,则需要使用 ajax。

如果您想阻止表单将您重定向到 mailer.php,那么您需要添加一些 javascript 来取消请求。挂钩按钮点击事件,并添加“return false;”以防止页面发生变化。

或者,使用 AJAX 提交表单,您可以更好地控制无缝提交此信息。 :)

【讨论】:

所以你是说我不能按照我现在的方式来做? 看起来您有答案,但正如上面的@Mason Stedman 所说,您使用 ajax 请求提交表单,这是停止页面刷新或导航的方式。上面提供的功能正是您所需要的。

以上是关于如何在wordpress中制作联系表格调用另一个php文件的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中保存 wordpress 联系表 7 提交

如何在 Docker 容器中从 WordPress(联系表格)发送电子邮件?

Wordpress 中联系表格 7 的日期和时间

Wordpress - 联系表格 7 - 卡住发送联系表格

如何在 WordPress 中创建联系表格?

如何在 WordPress 中创建联系表格?