【问题标题】:Contact form (Wordpress) won't submit联系表格(Wordpress)不会提交
【发布时间】:2014-11-01 03:47:06
【问题描述】:

我正在 Wordpress 中创建一个主题,使用 an Akismet formjQuery AJAX 脚本。我已经修改了所有相关区域以集成到我的 Wordpress 站点中,甚至使用已经存在的 Akismet API 密钥。这是我的代码:

表格

<form method="post" id="contact_form">
  <input id="name" type="text" name="name" tabindex="1"/> <label for="name">Name</label>
  <input id="email" type="text" name="email" tabindex="2"/> <label for="email">E-mail</label>
  <input id="website" type="text" name="website" tabindex="3" value="http://" /> <label for="website">Website</label>
  <textarea id="message" tabindex="4" rows="10" cols="60" name="message"></textarea>
  <input type="submit" value="Send E-mail" tabindex="5" />
</form>

jQuery

<script>
$(function() {
    $("#contact_form").submit(function() {
        $.ajax({
            type: "POST",
            url: "<?php bloginfo('template_url'); ?>/inc/email.php",
            data: $(form).serialize(),
            success: function(){
                $('.success').fadeIn(1000);
            }
        });
        return false;
    });
});
</script>

PHP 脚本

<?php
    require "Akismet.class.php";
    function send_mail( $name, $email, $website, $ip, $is_spam, $message) {
        $subject = '';
        if( $is_spam == true )
            $subject = "[SPAM?]"; 
        $subject .= "[Your_site.com] E-mail received from ".$author_name."//".$author_email."//".$ip;

        wp_mail( get_option('admin_email'), $subject, $message, $name.' <'.$email.'>');
    }
    if(isset($_POST['action'])) {
        $wp_key = get_option( 'wordpress_api_key' );
        $our_url = get_bloginfo( 'url' );

        $name = $_POST['name'];
        $email = $_POST['email'];
        $website = $_POST['website'];
        $message = $_POST['message'];
        $ip = $_SERVER['REMOTE_ADDR'];

        $akismet = new Akismet($our_url, $wp_key);
        $akismet->setCommentAuthor($name);
        $akismet->setCommentAuthorEmail($email);
        $akismet->setCommentAuthorURL($website);
        $akismet->setCommentContent($message);
        $akismet->setUserIP($ip);

        send_mail( $name, $email, $website, $ip, $akismet->isCommentSpam(), $message);
    }

当我提交表单时,它会处理一些内容并将我重定向到 404 页面,即使 URL 与联系页面相同。邮件也发不出去。有人可以帮我解决问题所在吗?

【问题讨论】:

    标签: php ajax wordpress email akismet


    【解决方案1】:

    您的表单将在 ajax 调用甚至被查看之前提交。使用 preventDefault 停止默认操作

    $(function() {
        $("#contact_form").submit(function(e) {
           e.preventDefault();
           ...
    

    编辑

    我只是注意到你返回 false,应该达到相同的结果,但有时我注意到它没有

    你可以试试preventDefault()

    【讨论】:

    • 谢谢。我已经尝试过了,它阻止了重定向到 404 页面,但表单仍然没有发送消息。我什至尝试将电子邮件地址和 API 密钥直接插入 PHP 脚本,但无济于事。
    • 我很高兴听到这个答案解决了Contact form (Wordpress) won't submit 问题。我建议您发布一个与电子邮件未发送问题相关的新问题。请记得采纳答案
    • 我确实提到电子邮件不会发送我原来的问题。虽然您的回答非常有帮助并防止了 404 错误,但它只解决了我发布的问题的一半。
    • 我明白了,我建议您发布一个新问题的原因是为了让您有更多机会获得有用的帮助。问题标题现在与您现在遇到的问题几乎没有相关性,(电子邮件不使用 php 发送) - 只是想提供帮助
    • 这更有意义,而且您确实有一个很好的观点。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2021-04-07
    • 2021-04-11
    相关资源
    最近更新 更多