通过页面中的功能发送电子邮件或在另一个页面中正确设置操作

时间:2017-12-08 作者:JGallardo

假设我想将所有代码放在一个自定义页面中,如page-contact.php 如何构造代码以便接收电子邮件?代码在其他PHP项目中也可以使用,但在WordPress环境中出现错误,为什么我只需要页面中的代码来处理表单,却找不到页面

背景

我确实阅读了另一个来源Sitepoint about about WordPress emails 但这是一个很小的项目,我只需要根据项目的设置来完成。

在另一个PHP项目中,我需要根据所写内容发送表单操作_contactform.php

<form action="_contactform.php" method="post" name=\'submitform\'>
在那里效果很好。但是,当我在WordPress项目中重用代码时,我遇到了一个错误,即该页面不存在,因为它似乎试图将用户指向url

http://example.com/contact/_contactform.php
因此,与其让行动_contactform.php 我想我可以把代码放在同一页上,但我该如何包装它,等等?

表单的php文件以以下开头

<?php
    /* Set e-mail recipient */
    $orderemail  = "[email protected]";

    $name = check_input($_POST[\'name\']);
    $email    = check_input($_POST[\'email\']);
    $address = check_input($_POST[\'address\']);

    $message = "
        Hello!

        Your contact form has been submitted by:

        Name: $name
        E-mail: $email

        Address:
        $address

        End of message
    ";

    /* Send the message using mail() function */
    mail($orderemail, $subject, $message);

2 个回复
SO网友:Tom J Nowell

<form action="_contactform.php" method="post" name=\'submitform\'>
注意,操作是_contactform.php, 相对URL,而不是绝对URL,因此它将附加到当前页面上。

但是,将表格提交到同一页并保留action 空白,然后在WordPress中运行代码。

这样,在页面的开头,您可以检查表单是否已提交,然后进行处理。如果不存在“获取”或“发布”选项,则显示联系人表单

SO网友:sMyles

您应该使用WordPress操作检查表单是否已提交(使用隐藏字段或提交按钮值),然后发送电子邮件。

您应该使用wp_mail 而不是mailhttps://developer.wordpress.org/reference/functions/wp_mail/

并建议使用WordPress环卫系统来保护您的网站安全,防止恶意利用您的代码:https://codex.wordpress.org/Data_Validation

添加隐藏字段以提交表单:

<input type="hidden" name="my_limited_info_form" />
要查看帖子,只需使用wp 操作(表单操作可以为空,以使用同一页面),并检查提交表单中的隐藏字段(将其放置在子主题中functions.php 文件或代码段插件):

add_action( \'wp\', \'smyles_send_email\' );

function smyles_send_email() {

    // Only proceed if our form was submitted
    if ( ! array_key_exists( \'my_limited_info_form\', $_POST ) ) {
        return;
    }

    $orderemail = "[email protected]";

    $name    = sanitize_text_field( $_POST[\'name\'] );
    $email   = sanitize_email( $_POST[\'email\'] );
    $address = sanitize_text_field( $_POST[\'address\'] );

    // This was missing?? You provided very limited details so i can only assume this was a mistake
    $subject = \'\';

    $message = "
        Hello!

        Your contact form has been submitted by:

        Name: $name
        E-mail: $email

        Address:
        $address

        End of message
    ";

    wp_mail( $orderemail, $subject, $message );
}
或者你有机会name 在提交按钮中设置的值,只需检查即可。

My recommendation though 将使用一个免费的插件,如Caldera表单,它允许您构建自定义表单并在后端为您处理所有这些。

https://wordpress.org/plugins/caldera-forms/

这是我的建议,提供的信息非常有限

结束

相关推荐

GravityForms是否将每个用户或IP的提交时间限制为30分钟?

我遵循GravityWiz的DIY代码,但作者没有提到如何让代码在30分钟、1小时、2小时等时间内工作。。。?他只解释了如何在24小时内工作-http://gravitywiz.com/better-limit-submission-per-time-period-by-user-or-ip/当查看此处的代码时-https://gist.githubusercontent.com/spivurno/4024361/raw/gw-gravity-forms-submission-limit.php这是否意味